关于byte数组转int类型数据不对的问题

2025-05-24 01:26:29

1、在进行3字节byte数组转换的时候,如果直接将byte进行移位操作,然后赋值给int,会导致高位符号被保留,如下;int v0 = b[0柯计瓤绘] << 16;int v1 = b[1] << 8;int v2 = b[2] ;return (v0 + v1 + v2);举例分析,比如byte数组为{(byte)0xC8,(byte)0x9C,(byte)0xAE},如果按照上述方法进行转换,得到的int数据为0xFFC89CAE,十进制为-3629906,就是说高字节的C8的最高位是1,在转成int类型的时候,会自动保留高位,因为int类型是32位,所以最高8位,自动设置为0xFF,转换错误。

2、正确的做法是,在进行移位之前,先将byte数据与0xFF进行与操作,0x掂迎豢畦FF默认是int类型,其实它的完整表达方式为0x00FF,当与byte剞麽苍足数据进行与操作以后,得到的高位仍然是00,然后再进行数据转换,就正确了,如下:int v0 = (b[0] & 0xff) << 16;int v1 = (b[1] & 0xff) << 8;int v2 = (b[2] & 0xff) ;return (v0 + v1 + v2);这样转换完以后的int数据就是0x00C89CAE,十进制为13147310(0x C89CAE对应的十进制数据本身就应该是13147310),这样是正确的。

3、在labVIEW开发中也存在这个问题,当我们对一个只有3个字节的byte数组进行数据类型转换的时候,要事先在这个数组前面追加一个字节0x00,如下图所示是正确的。

关于byte数组转int类型数据不对的问题

4、如果直接将3字节的数据进行转换,得到的是另一个数据,labview会自动在其后面(即低位)增加一个0x00,如下图所示,则是错误的。

关于byte数组转int类型数据不对的问题

5、这是labview中的数据类型强制转换存在的问题,容易忽略。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢