大端序和小端序

大端序和小端序,第1张

1、概念

字节序,又称端序,英文名称Endianness。字节序是指存放多字节(byte)数据的顺序。多用于整数在内存中的存放方式和网络传输的传输顺序,以及在蓝牙通讯中,表示数据传输字节长度。

2、原因

大小端序跟硬件的体系结构有关,跟 *** 作系统无关。

3、区别

大端字节序:高字节存于内存低地址,低字节存于内存高地址

小端字节序:高字节存于内存高地址,低字节存于内存低地址

例如:

实例一:整数在内存中的存放方式:

一个long型数据0x12345678

大端字节序:

内存低地址-》0x12

                          0x34

                         0x56

内存高地址-》0x78

小端字节序:

内存低地址-》0x78

                        0x56

                        0x34

内存高地址-》0x12

实例二:网络或蓝牙传输中的传输顺序:

传输长度为349的数据,转化为十六进制为0x015d

大端字节序传输:0x015d

内存低地址(前)0x01(高字节)

内存高地址(后)0x5d(低字节)

小端字节序传输:0x5d01

内存低地址(前)0x5d(低字节)

内存高地址(后)0x01(高字节)

备注:大小端字节序,是以字节为基本单位的,仅可针对多字节的情况,单字节:

0xF8转化为二进制:1111 1000第0位为0,第7位为1.

大端模式(Big-Endian)又称大端字节序,由于在网络传输中一般使用的是大端模式,所以也叫网络字节序。

在大端模式中,将高位字节放在低位地址,低位字节放在高位地址。

举个例子,数值 0x12345678 ,其中 0x12 这一端是高位字节, 0x78 这一端是低位字节。

该数值的存储顺序是这样的:

大端模式符合我们阅读和书写的方式,都是从左到右的。比如 12345678 ,我们只需要按照从左到右的顺序进行阅读和书写就是大端模式的存储顺序了。

小端模式(Little-Endian)又称小端字节序,由于大多数计算机内部处理使用的是小端模式,所以也叫主机序。

在小端模式中,将高位字节放在高位地址,低位字节放在低位地址。

小端模式比较符合我们人类的思维模式,大的放大的那一边,小的放小的那一边。但是在计算机中存储的顺序与我们看到的顺序是相反的。

对于早期的计算机来说,先处理低位字节效率比较高,因为计算都是从低位开始的,所以大多数计算机内部处理使用的是小端模式。但是计算机发展到现在,计算机的处理器相较于以前已经进步很多了,先处理高位还是低位字节的影响已经可以忽略,但是为了向后兼容,保留了大/小端模式。

大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。

大端模式更适合程序员阅读,因为看到的内容与输出的内容是一致的。

计算机在处理数据的时候,只会按照顺序去读取字节,不关心数据是大端模式还是小端模式。

程序在读取到数据后,需要判断计算机的大小端模式,来决定是否需要进行大小端转换。

如果读到的第一个字节是高位字节,那么就是大端模式;反之,如果读到的第一个字节是低位字节,那么就是小端模式。

字节顺序 ,又称 端序 尾序 (英语: Endianness )。在计算机科学计算机科学")领域中,是跨越多字节的程序对象的存储规则。

在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为 int 的变量 x 地址为 0x100 ,那么其对应地址表达式 &x 的值为 0x100 。且 x 的四个字节将被存储在存储器的 0x100, 0x101, 0x102, 0x103 位置。

在计算机中一般讲字节序分为两类: Big-Endian (大端字节序) 和 Little-Endian 。

a) Little-Endian 高位字节在前,低位字节在后。

b) Big-Endian 低位字节在前,高位字节在后。

c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

举个小例子:

整数127(十进制)在计算机(64位)中大/小端字节序

在x86的计算机中,一般采用的是小端字节序

输出


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8139638.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存