【发布时间】:2012-01-05 13:17:44
【问题描述】:
我正在使用一段代码(在本网站的其他位置找到)在运行时检查字节序。
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 "\001"
我假设第一个十六进制部分是指针的内存地址,第二部分是它保存的值。我知道 \0 在旧式 C++ 中是空终止,但为什么它在前面?跟字节序有关吗?
在小端机器上:01 第一个字节,因此是最低有效位(字节位置 0),\0 第二个字节/最后一个字节(字节位置 1)?
此外,cout 语句不打印指针地址或其值。这是什么原因?
【问题讨论】:
-
你定义
numPtr,用了之后怎么编译? -
现在已经改了。以我的名义进行错误的复制和粘贴。
-
为什么需要在运行时检查字节序。这不是每个端口的 make 文件的一部分吗?
标签: c++ endianness