一.字节序

字节序是由于不同的主处理器和操作系统,对大于一个字节的变量在内存中的存放顺序不同而产生的。

字节序通常有大端字节序列和小端字节序两种分类方法。

由于主机的千差万别,主机的字节序不能做到统一,但是网络上传输的数值,它们有统一的规定。网络字节序:是指多字节变量在网络传输时的表示方法,网络字节序采用高端字节序的表示方法(高位在前,低位在后,这是针对一个变量所处的字节中来说的,比如一个变量占两个字节,则该变量的第一个字节值应该放在它所对应的内存中的高位字节)。

二.大端字节序和小端字节序

字节序是由于CPU和OS对多字节变量的内存存储顺序不同而产生的。

1.brief introduce:

一个16位的整数,它由两个字节构成,在有的系统上会将高字节放在内存的低地址上,而有的系统上则将高字节放在内存的高地址上,所以存在字节序的问题。

2.字节序的表示方法有两种:

1>小端字节序(Little

Endian):在表示变量的内存起始地址存放底字节,高字节顺序存放

2>大端字节序(Big

Endian):在表示变量的内存起始地址存放高字节,底字节顺序存放。

3实例:

一个变量的值为0xabcd,在大端字节序和小端字节序的系统中两者的存放顺序是不同的.

1>在小端字节系统中的存放顺序如图:

0xab在地址15~8的地址上,而0xcd在地址7~0的位置上。

2>在大端字节序系统中的存放顺序如图:

4.程序实例:

可以编写程序来检测下变量在内存中的表示形式,以确定系统中的字节序为大端字节序还是小端字节序。

(1)字节序结构:

程序先建立一个公用体类型address,用于测试字节序,成员value是int

类型变量,可以通过成员byte来访问value变量的高字节和低字节。

typedef

union{

unsigned int value;

unsigned char byte[2];

}addr;

(2)变量声明,声明一个to类型的变量typeordr,给变量value赋值为0xabcd,由于在类型addr中,value和byte成员共享同一块内存,所以可以通过byte的不同成员来访问value的高字节和低字节。

(3)程序:

int main(int

argc,char *argv)

{

addr typeorder;//一个to类型的变量

typeorder.value=

0xabcd;

if(typeorder.byte[0] == 0xcd

&&typeorder.byte[1]==0xab){

printf(“Low endian bye

order\n”);

printf(“byte[0]:0x%x,byte[1]:0x%x\n”,typeorder.byte[0],typeorder.byte[1]);

}

if(typeorder.byte[0] == 0xab

&&typeorder.byte[1]==0xcd){

printf(“High

endian byte order\n”);

printf(“byte[0]:0x%x,byte[1]:0x%x\n”,typeorder.byte[0],typeorder.byte[1]);

}

return

0;

}

5.进行网络字节序转换的函数有htons,htonl,ntohs(),ntohl()等,其中s表示short数据类型,l是long数据类型的意思,h是host既主机的意思,n是network即网络的意思。

1>htons(host to net

short):表示对short类型的变量,从主机字节序转换为网络字节序。

2>ntohs(net to host

short):表示对short类型的变量,从网络字节序转换为主机字节序。

3>htonl(host to net

long):表示对long类型的变量,从主机字节序转换为网络字节序

4>ntohl(net to host

long):表示对long类型的变量,从网络字节序转换为主机字节序。

6.由于在网络中网络字节序采用高端字节序的表示方法。因此字节序转换函数在不同平台上的实现是不同的,在小端主机字节序的平台要进行转换,而在大端主机字节序的平台上是不需要进行转换的。

例如:通过下面的实现方式可以兼容不同的平台:

#if ISLE

long htonl(longvalue)

{

Return ((value << 24) |

((value <<8)&0x00ff0000)

|((value>>8)&0x0000ff00)|(value>>24));

}

#else if

ISBE

long

htonl(longvalue)

{

return  value;

}

#endif

python 网络字节序转换_网络字节序相关推荐

  1. java 二进制 2个字节 高位 低位_高位字节、低位字节

    一般一个16位(双字节)的数据,比如 FF1A  (16进制) 那么高位字节就是FF,低位是1A 如果是32位的数据,比如  3F68415B 高位字(不是字节)是3F68 低位字是415B 右边是低 ...

  2. tcp前4字节消息长度_网络基础篇之TCP

    ​网络分层 什么是 TCP TCP 是面向连接的.可靠的.基于字节流的传输层通信协议. - 面向连接:通过三次握手建立一对一的连接( UDP 协议 可以一个主机同时向多个主机发送消息,即一对多): - ...

  3. python 网络摄像头安装图解_网络摄像头在opencv-python和opencv-contrib-python...

    我一直在使用anaconda在python中的opencv中遇到网络摄像头问题. 问题如下: 如果通过以下两种方式之一安装了opencv,则无法打开网络摄像头: pip install opencv- ...

  4. 基于python的网络爬虫开题报告_网络爬虫开题报告.docx

    网络爬虫开题报告 网络爬虫开题报告 篇一:毕设开题报告 及开题报告分析 开题报告如何写 注意点 1.一.对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二.阅读文献资料进 ...

  5. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  6. 网络协议osi模型_网络协议|OSI模型第二层数据链路层

    MAC 地址 OSI第二层的作用,使局域网中的机器能互相连接并建立通信,还能够侦测传输错误.要向局域网中的其他机器发送信息,就需要借助 MAC 地址,来指定发送信息的目的地. MAC 地址其实就是网卡 ...

  7. java 二进制 2个字节 高位 低位_高位字节,低位字节应该怎么理解

    一般一个16位(双字节)的数据,比如 FF1A (16进制) 那么高位字节就是FF,低位是1A 如果是32位的数据,比如 3F68415B 高位字(不是字节)是3F68 低位字是415B 右边是低位位 ...

  8. 网络天才网页中文版_网络天才网页版(在线玩)

    为广大用户带来网络天才网页版在线玩游戏.网络天才网页版游戏给玩家带来精彩的问答类解谜游戏.游戏中你将化身Akinator,将被询问几个问题.从这几个问题中你将被猜出你心中所想.游戏非常的神奇,还没体验 ...

  9. 网络切片技术缺点_网络切片和服务质量(QoS)有什么区别?

    原标题:网络切片和服务质量(QoS)有什么区别? [OEM合作]小鸟云OEM能够为合作商提供完整的OEM公有云业务管理系统 + 无限制资源池API接口,合作商无需考虑复杂的资源池建设方案,也无需考虑庞 ...

最新文章

  1. 一场“交通进化”将至: 5G带给车联网与自动驾驶哪些升级?
  2. linux java性能监控工具_性能监控工具以及java堆分析OOM
  3. Python爬虫的框架有哪些?推荐这五个!
  4. jquery(ajax)+ashx简单开发框架(原创)
  5. python语法错误怎么办_Python中“函数外返回”语法错误的原因?
  6. P2023 [AHOI2009]维护序列
  7. windows下批处理删除文件及注册表项
  8. 现在实体店的生意越来越不好干
  9. pyspark的ALS协同过滤推荐算法-小结1
  10. Django Model出现的中文问题
  11. HTML:表格、表单和rem
  12. perl判断变量是数值_Perl学习12之defined undef使用
  13. 前端框架EasyUI
  14. Apex里面的retainAll
  15. AirServer Mac Airplay投屏工具
  16. 语音学习笔记3------matlab实现傅里叶反变换ifft()函数
  17. 程序猿怎么利用技术挣钱?——python量化实践
  18. Linux系统调用(syscall)原理(转载)
  19. jQuery-5(HTML DOM)
  20. 全干工程师神器 - Jmeter 06 - Jmeter后置处理器

热门文章

  1. 无法安装Hyper-V:虚拟机监控程序已在运行中的详细解决思路
  2. 如何轻松做出一个完整的小程序
  3. nova6什么时候开始鸿蒙2内测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
  4. ArcGIS:字段赋值_属性表字段计算器(Field Calculator)依据条件为字段赋值
  5. 配对编程:(半)权威指南
  6. 从菜鸟到大神:SEO优化方法大揭秘
  7. 百度选择网页游戏,能否成功?
  8. java 扇形_扇形导航 css3
  9. git 项目代码上传到服务器上,git 上传代码到服务器
  10. linux卸载docker