如何将uint8 *转换为uint32

时间:2018-02-06 17:45:53

标签: c++ bit bit-shift

写作时:

uint8_t var_a[4] = {0, 255, 0, 255};

我希望内存布局为:

00000000111111110000000011111111

但是在转换为uint32时:

cout << *(uint32_t*)var_a;

它返回4278255360,这是相反的

11111111000000001111111100000000

这是如何运作的?

1 个答案:

答案 0 :(得分:1)

你得到了你期望的内存布局。但是,当您将内存读作uint32_t时,系统会根据它在内存中如何布局32位值来解释它。您的系统似乎通过将最低有效字节放在第一位来在8位存储器地址中布置32位值。

说我有一张纸,上面有四个盒子。我可以将数字一千四百一十二写为“1,4,1,2”或“2,1,4,1”。没有特别的理由偏爱另一个因为人类通常从左到右的数字。

如果您要自己在这四个方框中的每个方框中放置数字,然后问我代表哪个四位数字,您必须知道我用哪个数字的方框。你不能只假设我从左到右使用。

您的计算机恰好将最低有效字节存储在较低的内存地址中。没有特别的理由偏爱一种方法而不是另一种方法。