弓火雨 2019-05-30 10:42 采纳率: 100%
浏览 775
已采纳

有关byte数组转int32的计算过程的一些疑问

下面的一段代码是用来将byte[]转为int数值的,在里面我用注释标记了两个问题:
1. 为什么startIndex是4的整数倍就可以用下面这种方式得到int值?
2. *((int*)pbyte) 这句代码具体做了哪些操作?数据发生了哪些变化?

希望有大佬给解释一下,谢谢!


图片说明


// 将字节数组转换为int
int bytesToInt32(char value[], int startIndex)
{
    char* pbyte = &value[startIndex];

    if (startIndex % 4 == 0) // data is aligned 
    {
        // 为什么startIndex是4的整数倍就可以用下面这种方式得到int值?
        // *((int*)pbyte) 这句代码具体做了哪些操作?数据发生了哪些变化?
        return *((int*)pbyte);
    }
    else
    {
        return (*pbyte) | (*(pbyte + 1) << 8) | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);
    }
}
  • 写回答

4条回答 默认 最新

  • huhuren12 2019-05-30 14:56
    关注

    你这个函数的作用是将value数组的第startIndex字节数据转换成int类型,不管有没有if (startIndex % 4 == 0)这句话,都是将value数组的第startIndex字节数据转换成int类型。else里面返回的int类型一定是小端模式的,比如pbyte 后面4个字节分别是0x12,0x34,0x56,0x78那么else里面返回一定是0x78563412.但是if里面就不一定了,如果使用的芯片是小端模式,那么return ((int)pbyte); 返回的还是0x78563412,但是如果你使用的芯片是大端模式,这时return ((int)pbyte);返回的数据就不是0x78563412了。
    而是0x12345678;*((int*)pbyte这句话的意思是将pbyte指针强制转换成int类型的指针,然后再取这个int类型指针的值,就是将alue[startIndex]往后读4字节的数据再转换成int型。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵