Linux C编程--网络编程1--字节顺序和字节处理函数.pdf

Linux C编程--网络编程1--字节顺序和字节处理函数.pdf

ID:51493365

大小:165.06 KB

页数:4页

时间:2020-03-25

Linux C编程--网络编程1--字节顺序和字节处理函数.pdf_第1页
Linux C编程--网络编程1--字节顺序和字节处理函数.pdf_第2页
Linux C编程--网络编程1--字节顺序和字节处理函数.pdf_第3页
Linux C编程--网络编程1--字节顺序和字节处理函数.pdf_第4页
资源描述:

《Linux C编程--网络编程1--字节顺序和字节处理函数.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、DLUTBruceZhang的专栏生活就是需要有创意--例如:Coding&&Debug[置顶]LinuxC编程--网络编程1--字节顺序和字节处理函数分类:LinuxC编程2013-03-0714:24551人阅读评论(2)收藏举报LinuxC编程字节处理函数字节顺序C语言套接字字节顺序不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序这个叫做主机序最常见的有两种1.Littleendian:将低序字节存储在起始地址2.Bigendian:将高序字节存储在起始地址LElittle-endian最符合人的思维的字节序地址低位存储值的低位地址

2、高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位反之,高位值就应该放在内存地址大的地方,也即内存地址高位BEbig-endian最直观的字节序地址低位存储值的高位地址高位存储值的低位为什么说直观,不要考虑对应关系只需要把内存地址从左到右按照由低到高的顺序写出把值按照通常的高位到低位的顺序写出两者对照,一个字节一个字节的填充进去图示如下:大端字节(Big-endian):----------------->>>>>>>>内存地址增大方向short变量地址0x10000x1001__

3、___________________________

4、

5、

6、0x31

7、0x32

8、________________

9、________________高位字节在低位字节的前面,也就是高位在内存地址低的一端.可以这样记住(大端->高位->在前->正常的逻辑顺序)小端字节(little-endian):----------------->>>>>>>>内存地址增大方向short变量地址0x10000x1001_____________________________1_____________________________

10、

11、

12、0x32

13、0x31

14、_______

15、_________

16、________________低位字节在高位字节的前面,也就是低位在内存地址低的一端.可以这样记住(小端->低位->在前->与正常逻辑顺序相反)下面给出一个程序检测系统采用的是什么字节顺序。#include#include#includeintmain(){union{shortinum;charc[sizeof(short)];}un;structutsnameuts;un.inum=0x0102;if(uname(&uts)<0){printf("Couldnot

17、gethostinformation.");return-1;}printf("%s-%s-%s:",uts.machine,uts.sysname,uts.release);if(sizeof(short)!=2){printf("sizeofshort=%d",sizeof(short));return0;}if(un.c[0]==1&&un.c[1]==2)printf("big_endian.");elseif(un.c[0]==2&&un.c[1]==1)printf("little_endian.");elseprintf(

18、"unknown.");return0;}网络协议中的数据采用统一的网络字节顺序,因为只有采用统一的字节顺序,才能在不同的机器之间正确的发送和接收数据。Internet规定的网络字节顺序采用big-endian方式。Linux采用了4个库函数来进行字节的转换:Ø.unsignedlonginthtonl(unsignedlonginthostlong);主机字节顺序转换为网络字节顺序(对无符号长整型进行操作,4bytes)Ø.unsignedshortinthtons(unsignedshortinthostshort);主机字节顺序转换为网络字节顺序

19、(对无符号短整型进行操作,2bytes)Ø.unsignedlongintntohl(unsignedlongintnetlong);网络字节顺序转换为主机字节顺序Ø.unsignedshortintntohs(unsignedshortintnetshort);网络字节顺序转换为主机字节顺序注:n代表net,h代表host,s代表short,l代表long2在编程中,需要使用网络字节顺序时,应该使用这几个函数来进行转换,绝对不要依赖于具体的机器表示的方式。字节处理函数套接字地址是多字节数据,不是以空字符结尾的,这和C语言中的字符串是不同的。Linux提供

20、两组函数来处理多字节数据,一组函数以b(byte)开头,是和BSD

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

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

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