字节序(byteorder)和位序(bitorder).pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字节序 (byte order) 和位序 (bit order) 字节序 (byte order) 和位序 (bit order) 在网络编程中经常会提到网络字节序和主机序,也就是说当 一个对象由多个字节组成的时候需要注意对象的多个字节 在内存中的顺序。 以前我也基本只了解过字节序,但是有一天当我看到 ip.h 中 对 IP 头部结构体 struct iphdr 的定义时,我发现其中竟然对 一个字节中的 8 个比特位也区分了大小端, 这时我就迷糊了, 不是说大小端只有在多个字节之间才会有区分的吗,为什么 这里的定义却对一个字节中的比特位也区分大小端呢 ? 下面我们先看一下 struct iphdr 的定义, 后文会解惑为什么要 在一个字节中区分大小端。 struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #error Please fix #endif __u8 tos; __be16 tot_len; __be16 id; __be16 frag_off; __u8 ttl; __u8 protocol; __sum16 check; __be32 saddr; __be32 daddr; /*The options start here. */ }; 字节序 (Byte order) 关于字节序的文章已经有很多了,在我这篇文章中不打算过 多的说字节序,但是也不能完全脱离字节序因为后面的重点 部分比特序跟字节序也有一定的相似度和联系。 字节序就是说一个对象的多个字节在内存中如何排序存放, 比如我们要想往一个地址 a 中写入一个整形数据 0,那么最后在内存中是如何存放这四个字节的 呢? 0x12 这个字节值为最高有效字节,也就是整数值的最高位 (在本文中 0x12=0 ,0x78 为最低有效字节。 图 1:大端字节序 上图是大端字节序的示意图,所谓”大端字节序” ,便是指 最高有效字节落在低地址上的字节存放方式。 图 2 :小端字节序 而小端字节序就是最低有效字节落在低地址上的字节存放 方式。 00+ 0x340000 + 0x5600 + 0x78 ,所以 要想保持一个对象的值在大小端系统之间不变,那么就必须 确保不同的系统能够正确的识别最高有效字节和最低有效 字节 (不能错误的识别最高、最低有效字节 )。 同样的字节序 12 34 56 78 在大端序机器中会识别为 00+ 0x340000 + 0x5600 + 0x78=0 ,在小端序机器中识别为 00x12 + 0x3400 + 0x5600 00+ 00 。 所以要想两者保持一致就必须确保系统能够正确的识别最 高有效字节 0x12 和最低有效字节 0x78 ,那么在小端系统中 字节存放的顺序应该为

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档