关于网络字节序和主机字节序解析.docVIP

  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文档。上传文档
查看更多
关于网络字节序和主机字节序解析

HYPERLINK /zhaojiangwei102/article/details/4532184 关于网络字节序 不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1 . Little endian :将低序字节存储在起始地址 2 . Big endian :将高序字节存储在起始地址 LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 低位值小,就应该放在内存地址小的地方,也即内存地址低位 反之,高位值就应该放在内存地址大的地方,也即内存地址高位 BE big-endian 最直观的字节序 地址低位存储值的高位 地址高位存储值的低位 为什么说直观,不要考虑对应关系 只需要把内存地址从左到右按照由低到高的顺序写出 把值按照通常的高位到低位的顺序写出 两者对照,一个字节一个字节的填充进去 例子:在内存中双字 0DWORD) 的存储方式 内存地址 4000 4001 4002 4003 LE 04 03 02 01 BE 01 02 03 04 例子:如果我们将 0x1234abcd 写入到以 0x0000 开始的内存中,则结果为 ?????? big-endian?? little-endian 0x0000?? 0x12?????? 0xcd 0x0001?? 0x23?????? 0xab 0x0002?? 0xab?????? 0x34 0x0003?? 0xcd?????? 0x12 x86 系列 CPU 都是 little-endian 的字节序 . 网络字节顺序是 TCP/IP 中规定好的一种数据表示格式,它与具体的 CPU 类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用 big endian 排序方式。 为了进行转换 bsd socket 提供了转换的函数 有下面四个 htons 把 unsigned short 类型从主机序转换到网络序 htonl 把 unsigned long 类型从主机序转换到网络序 ntohs 把 unsigned short 类型从网络序转换到主机序 ntohl 把 unsigned long 类型从网络序转换到主机序 在使用 little endian 的系统中 这些函数会把字节序进行转换 在使用 big endian 类型的系统中 这些函数会定义成空宏 同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生 bug. 注: 1 、网络与主机字节转换函数 :htons ntohs htonl ntohl (s 就是 short l 是 long h 是 host n 是 network) 2 、不同的 CPU 上运行不同的操作系统,字节序也是不同的,参见下表。 处理器 ???? 操作系统 ???? 字节排序 Alpha???? 全部 ???? Little endian HP-PA???? NT???? Little endian HP-PA???? UNIX???? Big endian Intelx86???? 全部 ???? Little endian -----x86 系统是小端字节序系统 Motorola680x()???? 全部 ???? Big endian MIPS???? NT???? Little endian MIPS???? UNIX???? Big endian PowerPC???? NT???? Little endian PowerPC???? 非 NT???? Big endian?? -----PPC 系统是大端字节序系统 RS/6000???? UNIX???? Big endian SPARC???? UNIX???? Big endian IXP1200 ARM 核心 ???? 全部 ???? Little endian 2. 一、字节序定义 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。 其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。 在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下: a) Lit

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档