理解字节序

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

一、字节序

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)
比如数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。
大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

二、为什么会有小端字节序

答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。
在X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端字节序。

三、计算机如何处理字节序

计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。
如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。

四、总结

"只有读取的时候,才必须区分字节序,其他情况都不用考虑。"
处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。然后,就正常使用这个值,完全不用再考虑字节序。即使是向外部设备写入数据,也不用考虑字节序,正常写入一个值即可。外部设备会自己处理字节序的问题。

本文参考自:https://www.cnblogs.com/gremount/p/8830707.html

目录
相关文章
|
2月前
|
存储
计算机存储,字节分为大端和小端
计算机存储,字节分为大端和小端
48 1
|
2月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
207 1
|
2月前
|
存储 小程序 编译器
什么是“大小端字节序”存储模式?
这篇内容讨论了计算机内存中存储整型变量的方式,特别是针对不同字节序(大端和小端)的概念。文章首先解释了正负整数在内存中以补码形式存储的规则,然后提出了一个问题:当一个4字节的整数在内存中存储时,其字节是如何分布的?接着,文章引入了大端字节序和小端字节序的概念,其中大端模式将高位字节存储在低地址,小端模式则相反。文章通过示例说明了两种存储模式的区别,并提供了一道题目来判断当前机器使用的字节序。最后,给出了一个简单的程序来检测系统是大端还是小端。
38 0
什么是“大小端字节序”存储模式?
|
10月前
|
存储 小程序 编译器
C语言:大小端字节序存储
大端字节序存储模式:把一个数据低位字节处的数据存放在高地址处,数据高位字节处的数据存放在低地址处
74 0
|
11月前
|
存储 编译器 C语言
大小端字节序和整型提升
大小端字节序和整型提升
|
存储 网络协议 编译器
字节序,主机字节序与网络字节序
是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。在计算机中是以字节为单位,每个地址对应一个字节,一个字节8bit。在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过sizeof来获取不同类型在内存中占用的字节数。在计算机系统中,当物理单位的长度大于1个字节时(所以char数据就不用区分字节序),就要区分字节顺序。常见的字节顺序有两种:大端和小端,当然还有其他字节顺序,但不常见,例如Middle Endian,通俗的讲,字节序就是cpu对内存中进行存储的顺序(以字节为单位进行存取)
155 0
|
存储 小程序 编译器
大小端字节序详解
在开始正文之前,我想先问一下大家,内存中是怎样存放一个数的?当然啊,我这里问的不是数据存储的形式(比如整数存原码,负数存补码),而是一个数据存放的顺序 我们先看下面这个例子,当我们看看当把十六进制函数0x11223344存进内存中会是怎么样的。
大小端字节序详解
大小端(字节序)存储模式
大小端(字节序)存储模式
大小端(字节序)存储模式
|
存储
大端模式、小端模式、高字节序、低字节序、MSB、LSB
你知道内存是怎么读取数据的吗?知道数据是怎么一个一个字节发送的吗?是低字节先发还是高字节先发?是bit0先发还是bit7先发?是从低地址开始读还是从高地址开始读?看完本篇比应该就明白了~
1120 0
大端模式、小端模式、高字节序、低字节序、MSB、LSB