大小端简介(先发布,后续完善)

学习大小端之前,先要掌握这几个相关知识点:
位、字节,可参考:https://blog.csdn.net/weixin_50245167/article/details/128747157
字节序

前言
csdn上有很多关于大小端的文章,大部分都是引用了维基百科或百度百科的说法,然后互相复制。这些文章内容冗余,对知识点的描述也让人不易理解。不过也有一些作品深入浅出,通俗易懂,今天我来稍加整理,再加入一些个人的认识,争取做到准确、全面、易懂。

简介
大小端是指数据的存储方式。先来看个最简单的例子:快递驿站,为便于理解,我们要假设这个驿站的货架只能横着放一排,就像计算机的内存一样,并且同一位顾客有两件快递的话,先到站的最重要,需要先存先取。如果我们是顾客,去取,只需说出自己的取件码即可,不会关注快递放在货架的哪个位置;但如果我们是驿站老板,当顾客只有一件快递,好说,到站直接扫码编号入库,顾客来了就直接拿给他。那如果是两个或以上呢?这就必然带来存放位置的问题,快件1先到,是放在位置a好还是b好呢?这个问题没有标准答案,为了保证顺序,放位置a的话取件时就从a取快件1,放位置b的话取件时就从b取快件1,最后结果都是一样的,先取快件1再取快件2,区别只体现在存储方式上,两种方式就叫大小端。开发过程中,如果只是使用数据,像顾客使用快递里的商品一样,那就无需关注大小端;如果涉及到读取,像驿站老板一样,当遇到2个及以上字节时,就需要关注大小端的问题。存储方式是驿站自己定的,大小端就是由cpu厂商定的。
我们用文邹邹的方式来重新描述一下,大端字节序是将高序字节存储在内存的低地址,小端字节序是将高序字节存储在内存的高地址。举例现有一32位的int数据,值是0x12345678,0x12是它的最高有效字节,0x78是其最低有效字节,假设从地址0x4000开始存,两种存放方式如图1所示:

图1 大小端示意图

由来
大小端这个名称本身,网传来自于《格列佛游记》,笔者以为对理解概念没什么帮助,csdn有太多文章提及,在此就不再赘述。我在公众号“呈子萧有一个idea”的一篇文章中找到了大小端两种存储方式的由来,摘抄如下:
“……这么看起来好像大小端模式各有千秋,但其实产生这样分化的原因是这样的:早期计算机在进行网络通信时,由于计算机性能不高,数据缓冲区不大,采用大端模式可以让计算机在收到数据包头的时候能够更快的分析出该数据的性质、长度等信息,将包头分析完后能尽快将缓冲池空出来留给后续的数据填入,因此早期很多CPU都是采用大端模式,且通信协议采用大端模式的习惯也保留到了现在,造成现在几乎所有的通信协议都是大端模式。  后来Intel另辟蹊径设计了小端模式的CPU如x86,因为小端模式加法器更容易实现,能够在ALU单元内简化硬件电路的设计,进而降低成本能够进入广大消费者群体中(毕竟那个年代能省一个晶体管都可以省下很多钱呢)。  再到后来随着摩尔定律的诞生和集成电路的发展,现在的计算机性能已经是早期的指数倍,所以大小端在当
今的计算机中其实并没有这么的重要,只不过厂家依然会根据以前的设计经验和应用场景来选择大小端的CPU,例如MCU还是会选择小端CPU来降低整体的成本(说到底就是历史进程中的必然事件,当年要是都统一了大小端我这篇文章还咋写呀?)”。

应用范围
x86的芯片是小端,arm是大小端可选,网络通信是大端

优缺点

判断

转换


参考
1.公众号“呈子萧有一个idea”
2.版权声明:本文为CSDN博主「wwwlyj123321」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wwwlyj123321/article/details/100066463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值