关于网络字节序和主机字节序
2015-09-22 20:36
337 查看
什么是字节序?是指整数在内存中保存的顺序。
字节序有两种:
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翻译成大端模式。
字节序有两种:
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翻译成大端模式。
相关文章推荐
- hihoCoder 1231 Border Length(ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 E)
- http协议
- 【计算机网络】http中get和post的区别
- Jesus Is Here(区域赛网络赛选拔)
- iOS开发 ----- 网络请求
- HttpRouter项目中的问题
- http-response-codes
- Web APi之HttpClient注意事项以及建议(四)
- 常见的网络图像格式有哪些,在HTML中各适合什么场合?
- 阅读笔记:TCP/IP详解卷1
- 那些不能遗忘的知识点回顾——计算机网络系列(笔试面试高频题)
- 不容忽视的网络安全
- 详细解读八大无线网络安全技术利弊
- atexit http://www.cnblogs.com/wanghetao/archive/2012/04/03/2431256.html
- 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误
- XE8-indy10中关于TIdTCPClientCustom.Connect的源码和解读
- HttpClient和HttpURLConnection的区别
- exit abort return 区别 http://blog.csdn.net/qingyue_bao/article/details/6577087
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛
- MKNetworkKit:AFNetworking(数据请求get:post)