【问题标题】:How to cast uint8* to uint32如何将 uint8* 转换为 uint32
【发布时间】:2018-02-06 17:45:52
【问题描述】:

写作时:

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

我希望内存布局是:

00000000111111110000000011111111

但是当转换为 uint32 时:

cout << *(uint32_t*)var_a;

它返回 4278255360,这是相反的

11111111000000001111111100000000

这是如何工作的?

【问题讨论】:

标签: c++ bit bit-shift


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 2011-11-14
    • 2017-03-11
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多