首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小端Vs大端

小端Vs大端
EN

Stack Overflow用户
提问于 2010-02-12 05:12:44
回答 5查看 7K关注 0票数 8

假设我有4Byte整数,我想把它转换成2Byte短整型。在(小端和大端)短整型中,4Byte整型中有2个最低有效字节,我说对了吗?

第二个问题:

这样的代码在小端和大端处理器中的结果会是什么?

代码语言:javascript
复制
int i = some_number;  
short s = *(short*)&i;

在大端处理器中,2个最高有效字节将被复制,在小端处理器中,2个最低有效字节将被复制。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-12 05:30:07

我说的对吗,在这两个短整型中,都是由这个4Byte整数的2个最低有效字节组成的?

是的,根据定义。

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

在小E上,这两个结果是相同的。

代码语言:javascript
复制
short s = (short)i;
short s = *(short*)&i;

在大端处理器上,最高地址是最低有效位,68000和Power PC是这样做的(实际上Power PC可以两者兼而有之,但苹果的PPC机使用bigE)

这在大E上给出了相同的结果。

代码语言:javascript
复制
short s = (short)i;
short s = ((short*)&i)[1]; // (assuming i is 4 byte int)

因此,正如您所看到的,小端允许您获取操作数的最低有效位,而无需知道它有多大。小E在保持向后兼容性方面具有优势。

那么高字节优先的优势是什么呢?它创建十六进制转储,更容易阅读。

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

票数 12
EN

Stack Overflow用户

发布于 2010-02-12 05:15:20

  1. 是。在转换值时,不必担心endianness.
  2. Yes.当您转换指针时,您需要这样做。
票数 2
EN

Stack Overflow用户

发布于 2010-02-12 05:19:18

首先,你可能已经知道了,但让我提一下,int的大小不能保证是4字节,而短小的大小不能保证在所有平台上都是2字节。

如果在你的第一个问题中你指的是这样的东西:

代码语言:javascript
复制
int i = ...;
short s = (short)i;

那么是的,s将包含i的低位字节。

我认为您的第二个问题的答案也是肯定的;在字节级,系统的字节顺序确实起到了作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2247736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档