网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)

网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)

ID:9088387

大小:41.00 KB

页数:7页

时间:2018-04-17

网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)_第1页
网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)_第2页
网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)_第3页
网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)_第4页
网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)_第5页
资源描述:

《网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、网络字节顺序和主机字节顺序的转换(htonsntohshtonlntohl)什么是网络字节顺序和主机字节顺序呢?在进行网络编程时,需要进行转换以统一“格式” 简述:网络字节顺序NBO(NetworkByteOrder):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。主机字节顺序(HBO,HostByteOrder):不同的机器HBO不相同,与CPU设计有关 详解:不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序这个叫做主机序最常见的有两种1.Littleendian:将低序字节存储在起始地址2.Bigendian:将高序字节存储

2、在起始地址LElittle-endian 最符合人的思维的字节序地址低位存储值的低位    地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位反之,高位值就应该放在内存地址大的地方,也即内存地址高位BEbig-endian最直观的字节序地址低位存储值的高位地址高位存储值的低位为什么说直观,不要考虑对应关系只需要把内存地址从左到右按照由低到高的顺序写出把值按照通常的高位到低位的顺序写出两者对照,一个字节一个字节的填充进去例子:在内存中双字0x01020304(DWORD)的存储方式内存地址400040014002

3、4003LE04030201BE01020304例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为big-endianlittle-endian0x00000x120xcd0x00010x230xab0x00020xab0x340x00030xcd0x12x86系列CPU都是little-endian的字节序.网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用bigendian排序方式。      为了进行转换bsdsocket提供了转换的函数有下面四个

4、htons把unsignedshort类型从主机序转换到网络序htonl把unsignedlong类型从主机序转换到网络序ntohs把unsignedshort类型从网络序转换到主机序ntohl把unsignedlong类型从网络序转换到主机序在使用littleendian的系统中这些函数会把字节序进行转换在使用bigendian类型的系统中这些函数会定义成空宏同样在网络程序开发时或是跨平台开发时也应该注意保证只用一种字节序不然两方的解释不一样就会产生bug.函数例子解析之htonl()简述:   将主机的无符号长整形数转换成网络字节顺序。   #include   

5、u_longPASCALFARhtonl(u_longhostlong);   hostlong:主机字节顺序表达的32位数。注释:   本函数将一个32位数从主机字节顺序转换成网络字节顺序。返回值:   htonl()返回一个网络字节顺序的值。inet_ntoa()简述:将网络地址转换成“.”点隔的字符串格式。  #include  charFAR*PASCALFARinet_ntoa(structin_addrin);  in:一个表示Internet主机地址的结构。注释:  本函数将一个用in参数所表示的Internet地址结构转换成以“.”间隔的诸如a.b.c

6、.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS套接口调用前,数据将保证是有效。返回值:若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数据应在下一个WINDOWS套接口调用前复制出来。 网络中传输的数据有的和本地字节存储顺序一致,而有的则截然不同,为了数据的一致性,就要把本地的数据转换成网络上使用的格式,然后发送出去,接收的时候也是一样的,经过转换然后才去使用这些数据,基本的库函数中提供了这样的可以进行字节转换的函数,如和ht

7、ons()htonl()ntohs()ntohl(),这里n表示network,h表示host,htons()htonl()用于本地字节向网络字节转换的场合,s表示short,即对2字节操作,l表示long即对4字节操作。同样ntohs()ntohl()用于网络字节向本地格式转换的场合。 附注:一、字节序定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。