• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于大端法、小端法以及网络字节序的深入理解

基于大端法、小端法以及网络字节序的深入理解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了大端字节序,什么是大端字节序,大端字节,大端序和小端序,大端序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。

也可以说:
1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。
2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。
举个简单的例子,对于整形0x12345678。它在大端法和小端法的系统内中,分别如图1所示的方式存放。

zijiexu_pic_1 

</div>

我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?
网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节序说是大端字节序。
比如我们经过网络发送0x12345678这个整形,在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放,如图2所示。

zijiexu_pic_2

字节序测试程序

不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序。

[0]:0x12
[1]:0x34
[2]:0x56
[3]:0x78

分析结果,在80X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端法。htonl将i_num转换成网络字节序,可见网络字节序是大端法。

总结点:80X86使用小端法,网络字节序使用大端法。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于大端法、小端法以及网络字节序的深入理解

相关文章

  • 2017-05-28新手小心:c语言中强符号与弱符号的使用
  • 2017-05-28C++11中lambda、std::function和std:bind详解
  • 2017-05-28详解C语言编程中的函数指针以及函数回调
  • 2017-05-28将字符串str1复制为字符串str2的三种解决方法
  • 2017-05-28解析C++中的5个存储类的作用
  • 2017-05-28最大子矩阵问题实例解析
  • 2017-05-28使用C语言实现vector动态数组的实例分享
  • 2017-05-28学习 C++能带给我们什么
  • 2017-05-28基于C/C++ 常见误区详解
  • 2017-05-28vc中使用SendMessage自定义消息函数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言实现杨辉三角实例
    • C++中关于委派(Delegates)的实现示例
    • C++编程中将引用类型作为函数参数的方法指南
    • 进制转换:二进制、八进制、十六进制、十进制之间的转换
    • 详解C语言位域的使用与注意事项
    • linux c程序中获取shell脚本输出的实现方法
    • C++如何实现DNS域名解析
    • C++通过COM接口操作PPT
    • 解析c++中参数对象与局部对象的析构顺序的详解
    • libevent库的使用--定时器的使用实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有