gpt4 book ai didi

c++ - 理解字节顺序——一个变量值

转载 作者:太空狗 更新时间:2023-10-29 20:46:12 24 4
gpt4 key购买 nike

我正在使用一段代码(在本网站的其他地方找到)在运行时检查字节顺序。

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);
}

在 Debug模式下,numPtr 的值如下所示:0x7fffffffe6ee "\001"

我假设第一个十六进制部分是指针的内存地址,第二部分是它持有的值。我知道\0 在旧式 C++ 中是空终止,但为什么它在前面?与字节顺序有关吗?
在小端机器上:01 是第一个字节,因此是最低位(字节位置 0),而\0 是第二个字节/最后一个字节(字节位置 1)?

此外,cout 语句不打印指针地址或其值。原因是什么?

最佳答案

其他人已经明确回答了"\000" 的含义,所以这是对您问题的回答:

On a little-endian machine: 01 the first byte and therefore least significant (byte place 0), and \0 the second byte/final byte (byte place 1)?

是的,这是正确的。你看看像 0x1234 这样的值,它由两个字节组成,高位部分 0x12 和低位部分 0x34。术语“little endian”表示低位优先存储在内存中:

addr:   0x34
addr+1: 0x12

您是否知道术语“endian”早于计算机行业?它最初由乔纳森· swift 在他的格列佛游记一书中使用,其中描述了人们是从尖头还是圆头吃鸡蛋。

关于c++ - 理解字节顺序——一个变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8743161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com