uint32无符号字节转为Java中的int

news2025/6/23 2:23:32

文章目录

  • 前言
  • 一、无符号字节转为int
    • 1.前置知识
    • 2.无符号转int代码
    • 3.Java中字节转为int
  • 二、字节缓冲流
    • 1.基础知识
    • 2.String与ByteBuffer转换
  • 总结


前言

Java 中基本类型都是有符号数值,如果接收到了 C/C++ 处理的无符号数值字节流,将出现转码错误。


提示:以下是本篇文章正文内容,下面案例可供参考

一、无符号字节转为int

1.前置知识

在线进制转换:https://tool.oschina.net/hexconvert
之前在解析 webscoket 传输得二进制数据时,因为二进制数据传输的是 uint32 无符号整数,需要把有符号的字节转为正常的;
uint32 代表无符号整数,只能存正整数,在内存中占4个字节,byte[4],0到4294967295,Java中 int 为32位有符号整数,占4字节,-2147483648 到 2147483648。

2.无符号转int代码

public static long bytes2int(byte[] buf){
    long anUnsignedInt = 0;
    int firstByte = 0;
    int sceondByte = 0;
    int thirdByte = 0;
    int fourthByte = 0;
    int index = 0;
    firstByte = (0x000000FF & ((int) buf[index+3]));
    sceondByte = (0x000000FF & ((int) buf[index+2]));
    thirdByte = (0x000000FF & ((int) buf[index+1]));
    fourthByte = (0x000000FF & ((int) buf[index]));
    anUnsignedInt = ((long) (firstByte << 24 | sceondByte << 16 | thirdByte << 8 | fourthByte)) & 0xFFFFFFFFL;
    return anUnsignedInt ;
}

3.Java中字节转为int

public static int byteArrayToInt(byte[] bytes) {
    int n = 0;
    for (int i = 0; i < 4; i++) {
        n += bytes[i] << i*8;
    }
    return n;
}

二、字节缓冲流

1.基础知识

  • 分配一个指定大小的缓冲区
// 1.分配一个指定大小的缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
System.out.println(buf.position); 	//0
System.out.println(buf.limit); 		//1024
System.out.println(buf.capacity); 	//1024
System.out.println(buf.mark); 
  • 利用put()方法进行存储数据
// 2.利用put()方法进行存储数据
String str = "hello nio";
buf.put(str.getBytes());
System.out.println(buf.position); 	//9
System.out.println(buf.limit); 		//1024
System.out.println(buf.capacity); 	//1024
System.out.println(buf.mark); 
  • 切换读取数据的模式
// 3.切换读取数据的模式
buf.flip();
System.out.println(buf.position); 	//0
System.out.println(buf.limit); 		//1024
System.out.println(buf.capacity); 	//1024
System.out.println(buf.mark);
  • 利用get()方法读取数据
// 4.利用get()方法读取数据
byte[] dst = new byte[buf.limit()];
buf.get(dst);
System.out.println(new String(dst, 0, dst.lenth));

System.out.println(buf.position); 	//9
System.out.println(buf.limit); 		//9
System.out.println(buf.capacity); 	//1024
System.out.println(buf.mark

2.String与ByteBuffer转换

import java.nio.ByteBuffer;  
import java.nio.CharBuffer;  
import java.nio.charset.Charset;  
import java.nio.charset.CharsetDecoder;  
  
public class Test {  
    /** 
     * String 转换 ByteBuffer 
     * @param str 
     * @return 
     */  
    public static ByteBuffer getByteBuffer(String str) {  
        return ByteBuffer.wrap(str.getBytes());  
    }  
  
    /** 
     * ByteBuffer 转换 String 
     * @param buffer 
     * @return 
     */  
    public static String getString(ByteBuffer buffer) {  
        Charset charset = null;  
        CharsetDecoder decoder = null;  
        CharBuffer charBuffer = null;  
        try {  
            charset = Charset.forName("UTF-8");  
            decoder = charset.newDecoder();  
            // charBuffer = decoder.decode(buffer);//用这个的话,只能输出来一次结果,第二次显示为空  
            charBuffer = decoder.decode(buffer.asReadOnlyBuffer());  
            return charBuffer.toString();  
        }  
        catch (Exception ex) {  
            ex.printStackTrace();  
            return "";  
        }  
    }  
}

总结

生活, 一半是回忆, 一半是继续。 把所有的不快给昨天, 把所有的希望给明天, 把所有的努力给今天。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程——CAS

什么是CAS CAS的全称&#xff1a;Compare and swap&#xff0c;字面意思就是&#xff1a;“比较并交换”&#xff0c;一个CAS涉及到以下操作&#xff1a; 假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B 1.比较A与V是否相等&#xff08;比较&#xf…

SAP中采购文档价格条件可以删除吗?

首先要声名&#xff0c;基于采购价格条件的严谨性和历史追朔需求&#xff0c;删除属于危险操作。不建议普通用户去执行操作。如果有兴趣&#xff0c;在测试系统中自行测试一下即可。正式系统中&#xff0c;还请慎重处理。 笔者公司日常不会去删除采购价格&#xff0c;日常处理…

网页在线封装App的新兴应用技术

在当今快速发展的技术时代&#xff0c;移动应用&#xff08;App&#xff09;无疑成为了连接用户与服务的桥梁。随着市场上App数量的激增&#xff0c;开发者不断探索更高效、成本更低的应用开发方法。其中&#xff0c;网页在线封装App技术&#xff0c;作为一种创新手段&#xff…

行测:国考省考行测:语句表达,位置分析,语句分析,语句填空

国考省考行测&#xff1a;语句表达 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点 遇到…

test0116测试2

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏&#xff1a;《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

Linux Mii management/mdio子系统分析之一 总体概述

Linux Mii management/mdio子系统分析之一 总体概述 &#xff08;转载&#xff09;原文链接&#xff1a;https://blog.csdn.net/u014044624/article/details/123303099 从本章开始&#xff0c;我们介绍linux的mii management对应的mdio子模块&#xff0c;该模块主要用于管理phy…

Java登录功能实现原理解密

目录 1、前言 2、登录功能介绍 3、前端实现 4、后端实现 5、数据库存储 6、加密和解密机制 7、安全性考虑 8、结语 1、前言 在Web开发中&#xff0c;登录功能是一个常见的需求。用户在登录页面输入用户名和密码后&#xff0c;系统会验证用户的身份信息&#xff0c;并根…

【文本到上下文 #6】高级词嵌入:Word2Vec、GloVe 和 FastText

一、说明 欢迎来到“完整的 NLP 指南。到目前为止&#xff0c;我们已经探索了自然语言处理的基础知识、应用程序和挑战。我们深入研究了标记化、文本清理、停用词、词干提取、词形还原、词性标记和命名实体识别。我们的探索包括文本表示技术&#xff0c;如词袋、TF-IDF 以及词嵌…

什么是高标准农田?为何要建设?该如何建设?

随着农业技术的不断进步&#xff0c;高标准农田成为了现代农业的标志之一。那么&#xff0c;什么是高标准农田&#xff1f;为何要建设高标准农田&#xff1f;如何建设高标准农田呢&#xff1f;接下来&#xff0c;我们将为您一一解答。 首先&#xff0c;我们来了解一下高标准农田…

【设计模式-3.3】结构型——享元模式

说明&#xff1a;说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;享元模式&#xff1b; 游戏地图 在一些闯关类的游戏&#xff0c;如超级玛丽、坦克大战里面&#xff0c;游戏的背景每一个关卡都不相同&#xff0c;但仔细观察可以发现&#xff0c;其都是用…

深入解析JavaScript中的变量作用域和闭包

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 JavaScript作为一门解释执行的脚本语言,其变量作用域与传统编译型语言…

Elasticsearch Windows部署-ELK技术栈

1、下载Elasticsearch、kibana、logstash 本文不介绍ELK相关原理知识&#xff0c;只记录部署操作过程 下载地址Past Releases of Elastic Stack Software | Elastic 选择同一版本&#xff0c;这里选择是当前最新版本8.11.3 解压放在同目录下&#xff0c;方便后续操作与使用 …

Linux网络文件共享服务

目录 一.文件存储类型 1.直连式存储&#xff1a;Direct-Attached Storage&#xff0c;简称DAS 2.存储区域网络&#xff1a;Storage Area Network&#xff0c;简称SAN&#xff08;可以使用空间&#xff0c;管理也是你来管理&#xff09; 3.网络附加存储&#xff1a;Network-…

卡尔曼滤波基本原理详解

卡尔曼滤波 卡尔曼滤波简介 卡尔曼滤波器&#xff08;Kalman Filter&#xff09;是一种高效的递推滤波器&#xff08;即基于上一个时刻的估计来更新当前时刻的估计&#xff09;&#xff0c;它能够从一系列含有噪声的观测数据中估计动态系统的状态。它在1960年由鲁道夫卡尔曼提…

kubectl与 jq的另外一些用法

背景&#xff1a; 在日常运维工作中&#xff0c;我们需要管理和操作大量的配置文件&#xff0c;这在使用 Kubernetes 集群管理应用时尤为常见。Kubernetes 提供了一个名为 ConfigMap 的资源对象&#xff0c;它用于存储应用的配置信息。有时&#xff0c;我们需要查找哪些 Confi…

第二证券:旅游股大涨 “预热”春节黄金周

在淄博烧烤热、哈尔滨冰雪热火爆出圈后&#xff0c;希望能接住文旅下一波“泼天富贵”的各地文旅局各出奇招并“卷”出新高度&#xff0c;被各地网友谈论“杀疯了”。 其间&#xff0c;A股游览概念股迎来一波集体上涨&#xff0c;成为不少出资者的重视热点&#xff0c;而行将到…

【原创】docker +宝塔+安装zabbix

Zabbix: Zabbix可以监控各种网络服务、服务器和网络设备&#xff0c;而无需在目标设备上安装客户端。它的强大之处在于自带的Web界面&#xff0c;能够提供实时监控和各种报警功能。方法1&#xff1a; 步骤 创建Docker Compose文件: 首先&#xff0c;你需要创建一个docker-comp…

FFmpeg之AVFormat

文章目录 一、概述二、解封装流程三、重要结构体3.1、AVFormatContext3.2、AVInputFormat3.3、AVOutputFormat3.4、AVStream 四、重要函数分析4.1、avformat_alloc_context4.2、avformat_open_input4.2.1、init_input4.2.2、av_probe_input_format2 4.3、avformat_find_stream_…

如何在几分钟内创建AI工具

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 完成这篇文章后&#xff0c;您将在不到 2 分钟的时间内构建您的第一个 AI 工具&#xff0c;而无需编写任何代码&#xff01; 您只需使用我将在这里与您分享的脚本…