假设我有4Byte整数,我想把它转换成2Byte短整型。在(小端和大端)短整型中,4Byte整型中有2个最低有效字节,我说对了吗?
第二个问题:
这样的代码在小端和大端处理器中的结果会是什么?
int i = some_number;
short s = *(short*)&i;在大端处理器中,2个最高有效字节将被复制,在小端处理器中,2个最低有效字节将被复制。
发布于 2010-02-12 05:30:07
我说的对吗,在这两个短整型中,都是由这个4Byte整数的2个最低有效字节组成的?
是的,根据定义。
bigE和littleE之间的区别在于最低有效字节是否位于最低地址。在小端处理器上,最低地址是最低有效位,x86是这样做的。
在小E上,这两个结果是相同的。
short s = (short)i;
short s = *(short*)&i;在大端处理器上,最高地址是最低有效位,68000和Power PC是这样做的(实际上Power PC可以两者兼而有之,但苹果的PPC机使用bigE)
这在大E上给出了相同的结果。
short s = (short)i;
short s = ((short*)&i)[1]; // (assuming i is 4 byte int)因此,正如您所看到的,小端允许您获取操作数的最低有效位,而无需知道它有多大。小E在保持向后兼容性方面具有优势。
那么高字节优先的优势是什么呢?它创建十六进制转储,更容易阅读。
实际上,摩托罗拉的工程师认为减轻读取十六进制转储的负担比向后兼容更重要。英特尔的工程师们则持相反的观点。
发布于 2010-02-12 05:15:20
发布于 2010-02-12 05:19:18
首先,你可能已经知道了,但让我提一下,int的大小不能保证是4字节,而短小的大小不能保证在所有平台上都是2字节。
如果在你的第一个问题中你指的是这样的东西:
int i = ...;
short s = (short)i;那么是的,s将包含i的低位字节。
我认为您的第二个问题的答案也是肯定的;在字节级,系统的字节顺序确实起到了作用。
https://stackoverflow.com/questions/2247736
复制相似问题