Ock*_*zor 14 c c++ type-conversion endianness
虽然我确实理解字节顺序,但我稍微不清楚代码如何在下面工作.我想这个问题不是关于字节序的问题,更多的是关于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);
}
Run Code Online (Sandbox Code Playgroud)
Mat*_* B. 17
short int类型是由两个字节,在这种情况下0x00和0x01.在小端系统上,小字节首先出现,因此在内存中显示为0x01后跟0x00.大端系统自然是颠倒过来的.对于小端系统上的短整数,这就是指针的样子:
----------------------- -----------------------
| 0x01 | 0x00 | | | |
----------------------- -----------------------
&word &word+1
Run Code Online (Sandbox Code Playgroud)
另一方面,字符指针总是按顺序递增.因此,通过获取整数的第一个字节的地址并将其转换为char *指针,您可以按内存顺序递增整数的每个字节.这是相应的图表:
------------ ------------ ------------ ------------
| 0x01 | | 0x00 | | | | |
------------ ------------ ------------ ------------
&byte &byte+1 &byte+2 &byte+3
Run Code Online (Sandbox Code Playgroud)
(char *)&word指向的第一个(最低地址)char(字节)word.如果你的系统是little-endian,这将对应于0x01; 如果它是big-endian,这将对应于0x00.
是的,这个测试应该起作用,无论word是short,int还是long(只要它们的尺寸大于a char).