了解字节序 - 变量值
Understanding Endianness - a variable value
我正在使用一段代码(在此站点的其他地方找到(在运行时检查字节序。
static bool isLittleEndian()
{
short int number = 0x1;
char *numPtr = (char*)&number;
std::cout << numPtr << std::endl;
std::cout << *numPtr << std::endl;
return (numPtr[0] == 1);
}
在调试模式下,值 numPtr 如下所示:0x7fffffffe6ee " 01"
我假设第一个十六进制部分是指针的内存地址,第二部分是它保存的值。 我知道\0在旧式C++中是空终止,但为什么它在前面? 与字节序有关吗?
在小端计算机上:01 第一个字节,因此最不重要(字节位 0(,\0 第二个字节/最后一个字节(字节位 1(?
此外,cout 语句不打印指针地址或其值。 原因何在?
其他人已经对" 00"
的含义给出了明确的答案,所以这是对你的问题的答案:
在小端计算机上:01 第一个字节,因此最不重要(字节位 0(,\0 第二个字节/最后一个字节(字节位 1(?
是的,这是正确的。你看像0x1234这样的值,它由两个字节组成,高部分0x12和低部分0x34。术语"小端序"意味着低部分首先存储在内存中:
addr: 0x34
addr+1: 0x12
您是否知道"字节序"一词早于计算机行业?它最初由乔纳森·斯威夫特(Jonathan Swift(在他的《格列佛游记》(Gulliver's Travels(一书中使用,其中描述了人们是从尖头还是圆头吃鸡蛋。
检查
字节序的最简单方法是让系统为您完成:
if (htonl(0xFFFF0000)==0xFFFF0000) printf("Big endian");
else printf("Little endian");
这不是后跟"01"的