当前位置:网站首页>大小端模式说明
大小端模式说明
2022-07-21 10:25:00 【senseshield】
概述
在计算中,字节顺序是指数字的二进制表示内的字节(或有时是位)的顺序。它也可以更普遍地用于指代任何表示的内部排序,例如数字系统中的数字或日期的部分。
在最常见的用法中,字节顺序表示多字节数字内的字节顺序。小端排序将最低有效字节放在最前面,将最高有效字节置于最后,而大端排序则相反。例如,考虑无符号十六进制数0x1234,这需要至少两个字节来表示。在小端排序中,字节将被排列为[0x34,0x12],而在大端排序中它们将是[0x12,0x34]。
在内存中的形式
比如有 int 整型数,其值以十六进制表示为:0x12345678,那么在内存中的存储如下图所示:
为什么有大小端
网上给出的描述是: 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,例如,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
简单的来说,计算机早期硬件设计没有统一的规范,于是就出现了大小端不一致的硬件设计,而且各自发展的都很好,等到万物互联后,数据有了交互,大小端也就成了必须要考虑的问题了。
现状
目前Intel的80×86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。
大小端注意场景
- 不同端模式的处理器进行数据传递时必须要考虑端模式的不同
- 注意 Java 和 C/C++ 语言开发的程序之间交互数据时大小端的转换
- 在网络上传输数据时,由于数据传输的两端对应不同的硬件平台,采用的存储字节顺序可能不一致。所以在TCP/IP协议规定了在网络上必须采用网络字节顺序,也就是大端模式。对于char型数据只占一个字节,无所谓大端和小端。而对于非char类型数据,必须在数据发送到网络上之前将其转换成大端模式。接收网络数据时按符合接受主机的环境接收。
参考
边栏推荐
- 【机器学习】NMF(非负矩阵分解)
- CGI的介绍及简单应用
- This price is fragrant enough! Lingyao 142022 shadow cyan glaze spike: 12th generation core +2.8k OLED screen
- Li Hongyi's deep learning course notes convolutional neural network
- matplotlib. Pyplot interface summary
- linux使用yum快速安装mysql
- tslib-1.4移植到mini2440开发板
- Bootloader series 3 - core initialization
- jenkins:构建的时候进入子目录然后在进行mvn操作
- pytorch入门一 实现简单的线性函数
猜你喜欢
pytorch实现 分组卷积 深度可分离卷积
Bootloader series I -- Analysis of ARM processor startup process
from scratch implement crnn using pytorch :读取训练数据
Code representation pre training language model learning guide: principles, analysis and code
【论文笔记】Modeling Task Relationships in Multi-task Learning withMulti-gate Mixture-of-Experts
jenkins:构建的时候进入子目录然后在进行mvn操作
生成数字图像基本过程
Examples and exercises of using map and COD files to locate the crash location
bootloader系列四——时钟初始化
Packet format of network packets
随机推荐
pytorch入门三 数据类型与函数
Codeforces round 578 (Div. 2) C - round corridor [number theory + Law]
Web Monitoring - mjpg streamer migration
【无标题】
pytorch学习之nn.Sequential类—使用Sequential类来自定义顺序连接模型
生成数字图像基本过程
2019牛客暑期多校训练营(第七场)A-String 【字符串最小表示法+暴力枚举】
Unity2D~对周目解密小游戏练习(三天完成)
Favorite version | the most complete machine learning optimizer in history optimizer summary
为配置SSL,自制CA证书
matplotlib. Pyplot interface summary
接口测试经典面试题:Session、cookie、token有什么区别?
Matplotlib draws a line graph
简单总结一下图像处理中概念
Sign up now | how to reduce the cost of cloud data analysis?
[performance optimization] MySQL common slow query analysis tools
Codeforces round 579 (Div. 3) C - common divisors [number theory]
bootloader系列二——arm920t--bootloader架构设计
函数之递归[通俗易懂]
Image segmentation using kmean and post-processing using CRFs