代码之家  ›  专栏  ›  技术社区  ›  Aravind A

如何将元素Unt32的数组转换成C/C++中的一个Unt64 64?

  •  0
  • Aravind A  · 技术社区  · 5 年前

    我很困惑,endianness是如何交换 uint32_t 数组转换为 uint64_t 反之亦然。

    uint64\ 像这样使用指针强制转换和取消引用:

    uint8_t array[8] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xb0, 0xa0};
    uint64_t u = *(uint64_t *)array; 
    

    u 0xa0b0ffeeddccbbaa

    但是,如果我有 第32页 像这样排列:

    uint32_t arr[2] = {0xaabbccdd, 0xeeffb0a0} ;
    uint64_t U = *(uint64_t *)arr;
    

    在小端系统上, U 变成 0xeeffb0a0aabbccdd

    我直观地理解了前者,但后者,与 太令人困惑了! 任何帮助,都将不胜感激!

    0 回复  |  直到 5 年前
        1
  •  1
  •   Lundin    5 年前

    持久性适用 个别地 在每一个16位或更大的整数上。也就是说,在little endian机器上,一个32位整数 0xaabbccdd dd cc bb aa .

    uint32_t [2] 0x11223344 0x55667788
    44 33 22 11 88 77 66 55 分别。在一个数组中,项目保证连续存储,因此在这种情况下,内存看起来像 44 33 22 11 88 77 66 55

    64位整数 0x1122334455667788 但是存储为 88 77 66 55 44 33 22 11

    如果CPU是big-endian,那么 将存储为:
    11 22 33 44 55 66 77 88 然后它碰巧得到了和 uint64_t .


    作为旁注 *(uint64_t *)array memcpy union