Arvin ZHANG 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 怎么解决这种情况,求解
  • ¥15 cadence PEX
  • ¥15 phython创建了文件 显示在项目下面,但运行不了,运行时还是运行main文件,并且说main文件不允许并行运行
  • ¥20 C++哈希表的设计构造哈希表
  • ¥15 FutureWarning:不推荐使用空或全 NA 条目的 DataFrame 串联行为。怎么改呢?
  • ¥15 Chatgpt突然无法正常显示数学公式,如何解决?
  • ¥15 一个用华为模拟器做的实验。
  • ¥28 opencv Cuda C++编译
  • ¥15 插入sim卡4g模组反复断连
  • ¥100 如何把 16bit Bayer 图像数据转换为 TIFF RGB