如何将 uint8* 转换为 uint32
How to cast uint8* to uint32
写作时:
uint8_t var_a[4] = {0, 255, 0, 255};
我希望内存布局为:
00000000111111110000000011111111
但是当转换为 uint32 时:
cout << *(uint32_t*)var_a;
就是returns4278255360,也就是反过来
11111111000000001111111100000000
这是如何工作的?
您得到了预期的内存布局。但是,当您将内存读取为 uint32_t
时,系统会根据内存中 32 位值的布局方式对其进行解释。您的系统似乎通过将最低有效字节放在前面来在 8 位内存地址中布置 32 位值。
假设我有一张纸,里面有四个盒子。我可以将数字一千四百一十二写成“1,4,1,2”或“2,1,4,1”。没有特别的理由仅仅因为人类通常从左到右正确地排列数字。
如果您要自己在这四个框中的每一个中放置数字,然后问我代表什么四位数,您必须知道我用哪个框表示哪个数字。你不能假设我使用的是从左到右。
您的计算机恰好将最低有效字节存储在较低的内存地址。没有特别的理由比另一种方法更喜欢一种方法。
写作时:
uint8_t var_a[4] = {0, 255, 0, 255};
我希望内存布局为:
00000000111111110000000011111111
但是当转换为 uint32 时:
cout << *(uint32_t*)var_a;
就是returns4278255360,也就是反过来
11111111000000001111111100000000
这是如何工作的?
您得到了预期的内存布局。但是,当您将内存读取为 uint32_t
时,系统会根据内存中 32 位值的布局方式对其进行解释。您的系统似乎通过将最低有效字节放在前面来在 8 位内存地址中布置 32 位值。
假设我有一张纸,里面有四个盒子。我可以将数字一千四百一十二写成“1,4,1,2”或“2,1,4,1”。没有特别的理由仅仅因为人类通常从左到右正确地排列数字。
如果您要自己在这四个框中的每一个中放置数字,然后问我代表什么四位数,您必须知道我用哪个框表示哪个数字。你不能假设我使用的是从左到右。
您的计算机恰好将最低有效字节存储在较低的内存地址。没有特别的理由比另一种方法更喜欢一种方法。