当我阅读一篇关于 Big/Little Endian 的文章时,我很困惑。
代码如下:
#include <iostream>
using namespace std;
int i = 12345678;
int main()
{
char *p = (char*)&i; //line-1
if(*p == 78) //line-2
cout << "little endian" << endl;
if(*p == 12)
cout << "big endian" << endl;
}
问题:
在第 1 行中,我可以使用
static_cast<char*>(&i)
进行转换吗?在第2行,根据代码,如果是little-endian,则
78
存储在最低字节,否则12
存储在最低字节。但我的想法是,i = 12345678;
会以二进制形式存储在内存中。如果是little-endian,那么
i
的二进制文件的最后一个字节会存储在最低字节,但是我不明白的是它怎么保证i
的最后一个字节是78
?p >就好比,如果
i = 123;
,那么i
的二进制就是01111011
,能不能保证在little-endian中,23
存放在最低字节?
最佳答案
我更喜欢
reinterpret_cast
。小端和大端指的是字节,即 8 位数量,存储在内存中的方式,不是两位小数。如果
i
的值为0x12345678
,那么您可以检查0x78
和0x12
以确定字节顺序,因为两个十六进制数字对应于一个字节(在我为其编程的所有硬件上)。
关于c++ - 整数如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499423/