繁体   English   中英

如何将 uint8* 转换为 uint32

[英]How to cast uint8* to uint32

写作时:

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

我希望内存布局是:

00000000111111110000000011111111

但是当转换为 uint32 时:

cout << *(uint32_t*)var_a;

它返回 4278255360,这是相反的

11111111000000001111111100000000

这是如何运作的?

您获得了预期的内存布局。 但是,当您将内存作为uint32_t读取时,系统会根据它在内存中排列 32 位值的方式来解释它。 通过将最低有效字节放在首位,您的系统似乎在 8 位内存地址中布置了 32 位值。

假设我有一张纸,里面有四个盒子。 我可以将数字 1411 写为“1,4,1,2”或“2,1,4,1”。 没有特别的理由更喜欢一个而不是另一个,因为人类通常从左到右使用正确的数字。

如果你要自己在这四个方框中分别输入数字,然后问我代表什么四位数,你必须知道我用哪个方框代表哪个数字。 你不能假设我使用的是从左到右。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM