MSB and LSB

2024-04-17 00:18
文章标签 lsb msb

本文主要是介绍MSB and LSB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Most Significant Bit, Last(Least) Significant Bit

最高有效位(MSB)
指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。
MSB高位前导,LSB低位前导。

谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢?

     其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。

     用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:

Big Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     从上面两图可以看出,采用big endian方式存储数据是符合我们人类的思维习惯的。而little endian,!@#$%^&*,见鬼去吧 -_-|||

     为什么要注意字节序的问题呢?你可能这么问。当然,如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。但是,如果你的程序要跟别人的程序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而J***A编写的程序则唯一采用big endian方式来存储数据。试想,如果你用C/C++语言在x86平台下编写的程序跟别人的J***A程序互通时会产生什么结果?就拿上面的0x12345678来说,你的程序传递给别人的一个数据,将指向0x12345678的指针传给了J***A程序,由于J***A采取big endian方式存储数据,很自然的它会将你的数据翻译为0x78563412。什么?竟然变成另外一个数字了?是的,就是这种后果。因此,在你的C程序传给J***A程序之前有必要进行字节序的转换工作。

     无独有偶,所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。ANSI C中提供了下面四个转换字节序的宏。
·BE和LE一文的补完

我在8月9号的《Big Endian和Little Endian》一文中谈了字节序的问题,原文见上面的超级链接。可是有朋友仍然会问,CPU存储一个字节的数据时其字节内的8个比特之间的顺序是否也有big endian和little endian之分?或者说是否有比特序的不同? 

     实际上,这个比特序是同样存在的。下面以数字0xB4(10110100)用图加以说明。 

Big Endian

   msb                                                         lsb
   ---------------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   1  |   0  |   1  |   1  |   0  |   1  |   0  |   0  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   lsb                                                         msb
   ---------------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   0  |   0  |   1  |   0  |   1  |   1  |   0  |   1  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


     实际上,由于CPU存储数据操作的最小单位是一个字节,其内部的比特序是什么样对我们的程序来说是一个黑盒子。也就是说,你给我一个指向0xB4这个数的指针,对于big endian方式的CPU来说,它是从左往右依次读取这个数的8个比特;而对于little endian方式的CPU来说,则正好相反,是从右往左依次读取这个数的8个比特。而我们的程序通过这个指针访问后得到的数就是0xB4,字节内部的比特序对于程序来说是不可见的,其实这点对于单机上的字节序来说也是一样的。 

     那可能有人又会问,如果是网络传输呢?会不会出问题?是不是也要通过什么函数转换一下比特序?嗯,这个问题提得很好。假设little endian方式的CPU要传给big endian方式CPU一个字节的话,其本身在传输之前会在本地就读出这个8比特的数,然后再按照网络字节序的顺序来传输这8个比特,这样的话到了接收端不会出现任何问题。而假如要传输一个32比特的数的话,由于这个数在littel endian方存储时占了4个字节,而网络传输是以字节为单位进行的,little endian方的CPU读出第一个字节后发送,实际上这个字节是原数的LSB,到了接收方反倒成了MSB从而发生混乱。

这篇关于MSB and LSB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910302

相关文章

分布式事务msb

分布式事务使用场景 添加商品看库存够不够。库存扣减,扣完给订单服务一个响应,如果新加商品出问题了怎么回滚。 分布式事务概念 XA规范 XA规范:总之一句话: 就X/Open DTP 定义的 事务协调者与数据库之间的接口规范(即接口函数),事务协调者用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供 XA规范的实现: 分布式集群的情况下

如何解决centos报错lsb_release: command not found?

lsb_release 是查看系统版本信息的工具,在使用的时候突然出现报错lsb_release: command not found? [root@localhost ~]# lsb_release -a -bash: lsb_release: command not found 解决方法:yum install redhat-lsb -y [root@localhost ~]# lsb_r

Centos7网卡启动失败(Failed to start LSB: Bring up/down)

好雨知时节 当春乃发生 随风潜入夜 润物细无声 报错内容 启动虚拟机时,Ceotos的虚拟网卡没有一起启动,导致服务无法正常使用 查询网络启动状态 systemctl status network.service 报Failed to start LSB: Bring up/down 查看网络启动日志 journalctl -u NetworkManager -b 报device

【续】关于对MSB/LSB写0时的步骤

本文作为上一篇文章《 【冬瓜哥手绘】上/下页、快/慢页、MSB/LSB都些什么鬼? 》的补充。由于上一篇文章冬瓜哥在写的时候比较急,有两个地方忘了补充,冬瓜哥早晨起来就总感觉缺了点什么,遂写了此文。冬瓜哥在本文中的知识体系得到了Ron@Memblaze同学的支持,以及赵登涛、Ray@Micron、Zac@Ramaxel的帮助。表示感谢! 1.      MS

【冬瓜哥手绘】上/下页、快/慢页、MSB/LSB都些什么鬼?

【本文背景】                  事情是这样的:冬瓜哥一直没弄清楚标题中的这些鬼概念,一直是心头一大疙瘩。昨天,在ssdfans群里,冬瓜哥就抛出了这个问题向大家请教,果不其然,一石激起千层浪,大家纷纷发表看法,结果并没有能让人看懂的表述,主要原因是群聊就根本不适合解释如此复杂的问题,其中瑞耐斯的创始人兵哥还画了个图来解释,但是冬瓜哥比较愚钝,未能理解。后来,

BUUCTF misc 专题 (9)LSB

先看题目  很明显,三个大大的英文字母LSB,提示了我们是LSB隐写  直接将图片拖入stegsolve  如图所示,进行data extract,将rgb勾起来然后save bin为png格式  发现是一张二维码,扫一扫答案就是flag{1sb_i4_s0_Ea4y}

启动jenkins报错:Failed to start LSB: Jenkins Automation Server

环境 linux 现象 首次安装jenkins后,启动报错 [root@test-210-50 jenkins]# systemctl start jenkins.service Job for jenkins.service failed because the control process exited with error code. See "systemctl status

LSB隐写是什么?

LSB隐写是什么? 所需知识二进制位LSB的概念LSB在数值中的作用LSB在量化中的应用小结 LSB隐写原理应用威胁与挑战改进补充资料 所需知识 二进制数 位(bit) LSB概念 二进制 在计算机科学中,二进制数是一种数制,使用两个数字:0和1来表示所有的数值。 位 位是计算机科学中的一个基本概念,是二进制数的最小单位。每个位可以是0或1,代表电子设备的一个开关状态。

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188)         个人主页:Matlab_ImagePro-CSDN博客         原则:代码均由本人编写完成,非中介,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则的事。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~

2022基于向量的多MSB替换-Vector-based Efficient DHEI via Multi-MSB Replacement

RRBE 本文仅供自身学习记录,切勿转载和搬运,如有侵权联系立删~ 本文贡献 1、提出了针对RRBE方法的两种嵌入方法,一种是有损的、一种是无损的,嵌入容量都很高; 2、和其他先进的方法相比,所提出方法的计算复杂度更低,不需要额外的文件传输,只需要图片即可; 3、实验数据表明平均嵌入率较高,且恢复图像的质量高于目前先进的方法。 EMR-RDHEI方法 A、Encoding phas