关于byte数组转int类型数据不对的问题
来源:网络收集 点击: 时间:2024-05-10在进行3字节byte数组转换的时候,如果直接将byte进行移位操作,然后赋值给int,会导致高位符号被保留,如下;
int v0 = b 16;
int v1 = b 8;
int v2 = b ;
return (v0 + v1 + v2);
举例分析,比如byte数组为{(byte)0xC8,(byte)0x9C,(byte)0xAE},如果按照上述方法进行转换,得到的int数据为0xFFC89CAE,十进制为-3629906,就是说高字节的C8的最高位是1,在转成int类型的时候,会自动保留高位,因为int类型是32位,所以最高8位,自动设置为0xFF,转换错误。
2/5正确的做法是,在进行移位之前,先将byte数据与0xFF进行与操作,0xFF默认是int类型,其实它的完整表达方式为0x00FF,当与byte数据进行与操作以后,得到的高位仍然是00,然后再进行数据转换,就正确了,如下:
int v0 = (b 0xff) 16;
int v1 = (b 0xff) 8;
int v2 = (b 0xff) ;
return (v0 + v1 + v2);
这样转换完以后的int数据就是0x00C89CAE,十进制为13147310(0x C89CAE对应的十进制数据本身就应该是13147310),这样是正确的。
3/5在labVIEW开发中也存在这个问题,当我们对一个只有3个字节的byte数组进行数据类型转换的时候,要事先在这个数组前面追加一个字节0x00,如下图所示是正确的。

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

这是labview中的数据类型强制转换存在的问题,容易忽略。
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_728820.html