可以说我有4个字节的整数,我想将其转换为2个字节的短整数。我是否正确(小端和大端),短整数都将由该4Byte整数的2个最低有效字节组成?

第二个问题:
在小字节序和大字节序处理器中,这样的代码会产生什么结果?

int i = some_number;
short s = *(short*)&i;

IMHO在大字节序处理器2中将复制最高有效字节,而在小字节序处理器2中将复制最低有效字节。

最佳答案



是的,根据定义。

bigE和littleE之间的区别在于,最低有效字节是否位于最低地址。在小字节序处理器上,最低地址是最低有效位,x86就是这样。

这些在小E上给出相同的结果。

short s = (short)i;
short s = *(short*)&i;

在大型字节序处理器上,最高地址是最低有效位,而68000和Power PC就是这样做的(实际上Power PC可以同时使用,但Apple的PPC机器使用bigE)

这些在大E上给出相同的结果。
short s = (short)i;
short s = ((short*)&i)[1]; // (assuming i is 4 byte int)

因此,如您所见,little endian允许您获取操作数的最低有效位,而无需知道操作数的大小。 little E具有保持向后兼容性的优点。

那么big endian的优势是什么?它创建易于阅读的十六进制转储。

确实,摩托罗拉的工程师认为减轻读取十六进制转储的负担比向后兼容更为重要。英特尔的工程师则相反。

关于c - 小端vs大端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2247736/

10-15 00:13