广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

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

    来源:网络收集  点击:  时间:2024-05-10
    【导读】:
    在进行设备数据采集的时候,经常会遇到数据类型转换的问题,比如说采集到了一组字节数据,有3个字节组成,这3个字节对应的是一个数据点,要把它转成int类型的数据,会出现转换不对的问题。工具/原料moreAndroid StudioLabVIEW方法/步骤1/5分步阅读

    在进行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,如下图所示是正确的。

    4/5

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

    5/5

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

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_728820.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-07 07:30:03  耗时:0.025
    0.0248s