gpt4 book ai didi

c++ - 测试字节序 : Why does the following code work?

转载 作者:IT老高 更新时间:2023-10-28 22:33:47 26 4
gpt4 key购买 nike

虽然我确实了解字节顺序,但我不太清楚下面的代码是如何工作的。我想这个问题不是关于字节序,而是关于 char * 指针和 int 如何工作,即类型转换。另外,如果变量 word 不是 short 而只是一个 int 会有什么不同吗?谢谢!

#define BIG_ENDIAN 0
#define LITTLE_ENDIAN 1

int byteOrder() {
short int word = 0x0001;
char * byte = (char *) &word;
return (byte[0] ? LITTLE_ENDIAN : BIG_ENDIAN);
}

最佳答案

一个短整数由两个字节组成,在本例中为 0x000x01。在小端系统中,小字节在前,因此在内存中它显示为 0x01,然后是 0x00。大端系统自然是颠倒的。这是小端系统上短整数的指针的样子:

----------------------- ----------------------- 
| 0x01 | 0x00 | | | |
----------------------- -----------------------
&word &word+1

另一方面,字符指针总是按顺序递增。因此,通过获取整数的第一个字节的地址并将其转换为 char * 指针,您可以按内存顺序递增整数的每个字节。这是对应的图表:

------------ ------------ ------------ ------------ 
| 0x01 | | 0x00 | | | | |
------------ ------------ ------------ ------------
&byte &byte+1 &byte+2 &byte+3

关于c++ - 测试字节序 : Why does the following code work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564574/

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