Tom*_*ski 8 c pointers casting endianness
让我说我有4Byte整数,我想把它转换为2Byte短整数.我是对的,在(小和大端)短整数将包含这个4Byte整数的2个最低有效字节?
第二个问题:
小端和大端处理器中这些代码的结果是什么?
int i = some_number;
short s = *(short*)&i;
Run Code Online (Sandbox Code Playgroud)
在大端处理器2中的恕我直言,将复制最重要的字节,在小端,将复制2个最低有效字节.
Joh*_*ler 12
我是对的,在两个短整数中都包含这个4Byte整数的2个最低有效字节吗?
是的,根据定义.
bigE和littleE之间的区别在于最低有效字节是否位于最低地址.在小端处理器上,最低地址是最低有效位,x86就是这样做的.
这些在小E上得到相同的结果.
short s = (short)i;
short s = *(short*)&i;
Run Code Online (Sandbox Code Playgroud)
在大端处理器上,最高地址是最低有效位,68000和Power PC这样做(实际上Power PC可以是两者,但Apple的PPC机器使用bigE)
这些给出了大E的相同结果.
short s = (short)i;
short s = ((short*)&i)[1]; // (assuming i is 4 byte int)
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,little endian允许您获取操作数的最低有效位,而无需知道它有多大.little E具有保持向后兼容性的优点.
那么big endian有什么优势呢?它创建更容易阅读的十六进制转储.
实际上,摩托罗拉的工程师认为减轻读取十六进制转储的负担比向后兼容性更重要.英特尔的工程师相反.