惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
爱范儿
爱范儿
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 叶小钗
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
博客园 - 司徒正美
博客园 - 【当耐特】
IT之家
IT之家

博客园 - gjung

收藏 Multithreaded COM server problem Python操作IHTMLDocument2用于自动化测试 svn对比文件源码 SQL SERVER LDF日志文件过大的问题 经度和纬度 TUXEDO 通讯缓冲区类型 TUXEDO client端示例程序 TUXEDO自带 方便查看 - gjung TUXEDO server端示例程序 TUXEDO自带 方便查看 固定资产减值准备与累计折旧会计核算的关系 固定资产折旧方法 application 和 session区别以及使用application存储在线用户的session信息 sql server 2005的分页函数ROW_NUMBER 面向接口编程 abstract、virtual及override - gjung - 博客园 抽象类与接口的区别 用bde连接 连接sql server2005 - gjung 网页中的控件编辑状态 从sql2000 复制数据到sql2005
关于网络字节序和主机字节序
gjung · 2010-02-04 · via 博客园 - gjung

关键字:关于网络字节序和主机字节序

描述:什么是字节序?是指整数在内存中保存的顺序。     字节序有两种:     a.Littleendinan低位存储在内存的低地址,

      什么是字节序?是指整数在内存中保存的顺序。
      字节序有两种:
      a.Little endinan 低位存储在内存的低地址,高位存储在内存的高地址;
      b.Big endian 高位存储在内存的低地址,低位存储在内存的高地址;

      举个简单的例子:
DWORD dwCount = 0x01020304;这样的一个双字节变量在内存中如下分布0013FF70  04 03 02 01
(注:实验结果取之 XPSP3 VC6.0,说明我的机器是Little endinan序)
而如果是Big endian序的话,应该是0013FF70  01 02 03 04。用的比较多的x86系列的CPU,都是Little endinan序的。

      而网络字节序这是TCP/IP协议中定义好的一种数据表示格式,它是与你的机器的cpu,操作系统什么的无关的,这样可以保证数据在网络中传输时,不管怎么样都能正确的解释了,网络字节序选择了Big endian。这样就给编写网络程序的程序员带来一个问题,程序员必须把本地数据从主机字节序转换成网络字节序发送到主机,同时,主机也必须把收到的数据从网络字节序转换成本地字节序,这样才能保证双方正确的收发数据,不然就是产生bug。

      winapi提供了四个函数用于进行网络字节序到本机字节序和本机字节序到网络字节序的转换:
htons:把unsigned short类型从主机序转换到网络序
htonl:把unsigned long类型从主机序转换到网络序
ntohs:把unsigned short类型从网络序转换到主机序
ntohl:把unsigned long类型从网络序转换到主机序
(这四个API可以这样记,s表示short,l表示long,n表示network,h表示host)

      另外:char类型是没有字节序的问题的,只有大于一个字节的数据类型才有字节序的问题。很多翻译书籍将Little endinan翻译成小端模式,将Big endian翻译成大端模式。