【转】理解字节序 大端字节序和小端字节序

转自:https://www.cnblogs.com/gremount/p/8830707.html

以下内容参考了

http://www.ruanyifeng.com/blog/2016/11/byte-order.html

https://blog.csdn.net/yishengzhiai005/article/details/39672529

 

1.

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。

举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11,那么大小端存储有以下协议:

  • 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
  • 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

 

同理,0x1234567的大端字节序和小端字节序的写法如下图。

2.

我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?

上周,我读到了一篇文章,解答了所有的疑问。而且,我发现原来的理解是错的,字节序其实很简单。

3.

首先,为什么会有小端字节序?

答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序

但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。

4.

计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。

如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。

理解这一点,才能理解计算机如何处理字节序。

5.

字节序的处理,就是一句话:

"只有读取的时候,才必须区分字节序,其他情况都不用考虑。"

处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。然后,就正常使用这个值,完全不用再考虑字节序。

即使是向外部设备写入数据,也不用考虑字节序,正常写入一个值即可。外部设备会自己处理字节序的问题。

6. 

字节序转换的例子

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

#include <stdio.h>
#include <netinet/in.h>
int main()
{
    int i_num = 0x12345678;
    printf("[0]:0x%x\n", *((char *)&i_num + 0));
    printf("[1]:0x%x\n", *((char *)&i_num + 1));
    printf("[2]:0x%x\n", *((char *)&i_num + 2));
    printf("[3]:0x%x\n", *((char *)&i_num + 3));
10  
11     i_num = htonl(i_num);
12     printf("[0]:0x%x\n", *((char *)&i_num + 0));
13     printf("[1]:0x%x\n", *((char *)&i_num + 1));
14     printf("[2]:0x%x\n", *((char *)&i_num + 2));
15     printf("[3]:0x%x\n", *((char *)&i_num + 3));
16  
17     return 0;
18 


在80X86CPU平台上,执行该程序得到如下结果: 
[0]:0x78 
[1]:0x56 
[2]:0x34 
[3]:0x12

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建windows服务,定时监控网站应用程序池

最近网站总是报"Timer_Connection"错误,导致该网站所使用的应用程序池由于错误过多停止运行,网站也就出现了service unvaliable,无法访问,在网上查了很多资料,结果很让人无奈,这个问题已经困扰我了很久,一直没有得到解决,后来同事发来一篇文章让我有了新的解决方法,虽…

【转】Qtcreator中常用快捷键和小技巧

转自&#xff1a;https://blog.csdn.net/imxiangzi/article/details/48863855 https://blog.csdn.net/jh1513/article/details/52346802 快捷键及对应含义 下载地址&#xff1a;http://download.csdn.net/detail/jh1513/9615209 快捷键 功能 Esc 切换到代码编辑状态 F1 …

【转】VS编译时自动引用Debug|Release版本的dll

转自&#xff1a;https://www.cnblogs.com/KevinYang/archive/2011/04/10/2011879.html 公司一些早期的项目&#xff0c;把所有工程都放到一个解决方案下了&#xff0c;导致整个解决方案编译很慢&#xff0c;而且也不便于类库的复用和维护。因此我们决定把工程按照功能划分到不…

【转】DICOM之Print!!!!!!!!!

转自&#xff1a;https://blog.csdn.net/weixin_41556165/article/details/81064531 基本概念&#xff1a; Film:在DICOM协议中使用Film来统称不同的Hard Copy&#xff0c;例如photographic film和paper。 DICOM Print的数据流由Print Session、Print Job、Print&#xff08;h…

静态html js文件上传,js实现动态添加上传文件页面

发邮件是需要添加一些文件&#xff0c;每添加一个文件&#xff0c;页面上可以显示一个表单文件上传选项。此功能为&#xff1a;初始时刻只有一个添加按钮&#xff0c;当点击添加文件时&#xff0c;会增加一个选择文件和删除区域&#xff0c;同时显示上传按钮&#xff0c;当点击…

WINCE6.0文件系统及存储管理器

*******************************LoongEmbedded******************************** 作者&#xff1a;LoongEmbedded 时间&#xff1a;2010.12.03 类别&#xff1a;WINCE嵌入式系统 ********************************LoongEmbedded******************************** Filesys.…

【转】Wireshark网络抓包(一)——数据包、着色规则和提示

转自&#xff1a;https://www.cnblogs.com/strick/p/6261463.html 一、数据包详细信息 Packet Details面板内容如下&#xff0c;主要用于分析封包的详细信息。 帧&#xff1a;物理层、链路层 包&#xff1a;网络层 段&#xff1a;传输层、应用层 1&#xff09;Frame 物理层…

【转】Wireshark网络抓包(二)——过滤器

转自&#xff1a;https://www.cnblogs.com/strick/p/6261915.html 一、捕获过滤器 选中捕获选项后&#xff0c;就会弹出下面这个框&#xff0c;在红色输入框中就可以编写过滤规则。 1&#xff09;捕获单个IP地址 2&#xff09;捕获IP地址范围 3&#xff09;捕获广播或多播地址…

html访问虚拟目录路径,IIS7.5虚拟目录物理路径指向共享文件夹详解

本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本。UNC是 Universal Naming Convention 的简称&#xff0c;也叫通用命名规范、通用命名约定。网络(范指局域网)上资源的完整位置名称。通常情况下&#xff0c;拥有多台服务器的朋友在使用IIS建立站点的时候&…

【转】DICOM:DICOM三大开源库对比分析之“数据加载”

背景&#xff1a; 上一篇博文DICOM&#xff1a;DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具&#xff0c;在日常使用过程中发现&#xff0c;“只要Sante DICOM Editor打不开的数据&#xff0c;基本可以判定此DICOM文件格式错误&#xff08;准确率达99.9999%…

html中点击照片时放大缩小,基于jquery实现一张图片点击鼠标放大再点缩小

. 代码如下:var isopen false;var newImg;var w 200; //将图片宽度200var h 200; // 将图片高度 200$(document).ready(function(){$("img").bind("click", function(){newImg this;if (!isopen){isopen true;$(this).width($(this).width() w);$(th…

css入门之head区设置

收藏夹小图标 如果你将本站加入收藏夹&#xff0c;可以看到在收藏夹网址之前的IE图标变成了本站特别的图标。要实现这样效果很简单&#xff0c;首先制作一个16x16的icon图标&#xff0c;命名为favicon.ico&#xff0c;放在根目录下。然后将下面的代码嵌入head区&#xff1a; &l…

04751计算机网络安全讲解,【19份】04751计算机网络安全自考试卷_历年真题自考答案及解析_湖南080901计算机科学与技术(原B080702计算机及应用)专业-自考生资料网...

1、资料如何使用本商城提供资料为WORD版&#xff0c;可打印成纸质版&#xff0c;结合备考习惯&#xff0c;营造考试氛围。支持手机查看&#xff0c;随时随地&#xff0c;高效学习。WORD文档也可直接用于电脑端学习&#xff0c;快速浏览&#xff0c;永久使用。2、文档无法编辑&a…

【转】Wireshark网络抓包(三)——网络协议

转自&#xff1a;https://www.cnblogs.com/strick/p/6262284.html 一、ARP协议 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;将IP地址解析成MAC地址。 IP地址在OSI模型第三层&#xff0c;MAC地址在OSI第二层&#xff0c;彼此不直接通信…

【转】Wireshark网络抓包(四)——工具

转自&#xff1a;https://www.cnblogs.com/strick/p/6344486.html 一、基本信息统计工具 1&#xff09;捕获文件属性&#xff08;Summary&#xff09; 1. File&#xff1a;了解抓包文件的各种属性&#xff0c;例如抓包文件的名称、路径、文件所含数据包的规模等信息 2. Tim…

silverlight + wcf(json格式) + sqlserver存储过程分页

silverlight并没有提供现成的分页控件&#xff0c;百度了一圈&#xff0c;也没有发现aspx中好用的类似AspNetPager成熟控件&#xff0c;网上现有的一些分页代码&#xff0c;很多也是基于1.0版本的&#xff0c;silverlight2.0的并不多&#xff0c;自个儿琢磨了一下&#xff0c;发…

什么是指利用计算机和现代,现代计算机一般指什么计算机?

现代计算机一般指通用数字电子计算机&#xff0c;它是当今世界电子计算机行业中的主流&#xff0c;其内部处理的是一种称为符号信号或数字信号的电信号&#xff1b;它的主要特点是“离散”&#xff0c;在相邻的两个符号之间不可能有第三种符号存在。电子计算机分为模拟式电子计…

【转】VS中常用图标提示含义

转自&#xff1a;https://www.cnblogs.com/zhjason/articles/14044190.html 有增删 “类视图”和“对象浏览器”图标 “类视图”和“对象浏览器”显示表示代码实体的图标&#xff0c;如命名空间、类、函数和变量 。 下表展示和描述了图标。 图标描述图标描述图标描述图标描述…

二层和三层转发

二层转发的机制是什么?学习线程和报文转发线程。二层只跟MAC地址有关 与IP无关 所以在二层做IP&#xff0d;MAC绑定是无效的。 三层以太网交换机的转发机制主要分为两个部分&#xff1a; 二层转发和三层交换。      先讲二层转发流程。      1、 MAC地址介绍   MA…

【转】胶片曝光时的排版!!!!!!!

这个本来没啥 不是什么算法 绝技。 都不值得一提。 其实这个是医学影像胶片曝光时排版的一个逻辑。 dicom标准第三部分 主要是讲IOD定义 在第166页有这样的描述&#xff1a; 表C.13.5-1图象盒象素描述组件 属性名称 标记       说明 图象位置 (2020,0010)  …