当前位置:网站首页>巧记大小端字节序
巧记大小端字节序
2022-06-26 23:31:00 【CoderNotCold】
0. 一句话总结
从左向右读(从低地址到高地址),
先遇到权重“大”的就是“大”端字节序,
先遇到权重“小”的就是“小”端字节序。
1. 详细解释
计算机存储的最小单位是比特(bit),一个比特只有0和1两种状态。相邻的8个比特构成一个字节(byte)。字节通常是程序可以寻址的最小单元,每个字节都有各自独立的地址,相邻字节的地址逐个递增。
每个字节由8个比特组成,所以共有2的8次方(即256)种状态。常用16进制来表示一个字节的值:前后4个比特分别为一组,每组比特可能的取值有16个:0~9以及A~F。所以16进制下,一个字节是用两个数字表示的。
下面我们只考虑计算机存储数字的情况。一个字节的存储范围是非常有限的(有符号数0到255,无符号数-128到127),超过这个范围的数字就要用多个连续的字节表示。这里就出现了字节顺序的问题:到底是把高位字节放在高地址,低位字节放在低地址,还是反过来呢?比如0x12345678需要占用4个字节,那就有两种可能的存储顺序:
注意:0x12是一个字节,作为一个整体,无论使用哪种方式,1和2的顺序是不会变的,也就是说不会存储成0x21。
对于具体采用哪种存储顺序,人们并没有形成统一的标准,所以就有了两种字节序:大端字节序和小端字节序。大端字节序是高位字节放在低地址,低位字节放在高地址。小端字节序是高位字节放在高地址,低位字节放在低地址。如下图所示: 
可以通过下面的方式记忆:
从左向右读(从低地址到高地址),
先遇到权重“大”的就是“大”端字节序,
先遇到权重“小”的就是“小”端字节序。
2. 哪些数据类型需要考虑字节序?
很明显,只有超过一个字节的数据类型才需要考虑字节序。但这并不是完全准确的:举例来说,C语言的结构体也是一个多字节的数据,但它的成员在内存中的顺序就是代码中的顺序,与当前是哪种字节序无关。所以我认为应该在“多字节数据”的基础上再加上一个限制:“通常是基本数据类型(例如uint32_t)”。
3. 什么时候需要关注字节序?
只有当读数据和写数据时有可能使用不同的字节序时,才需要关注字节序。例如跨平台文件、网络传输等。
4. 怎样判断当前的字节序?
可借助C语言中的联合体或对数据进行强制类型转换的方式得知当前机器的字节序。可参考:https://github.com/CoderNotCold/endian-c
5. 常见字节序
5.1 网络字节序
大端字节序
5.2 Java的字节序
大端字节序
5.3 部分CPU的字节序
x86:小端字节序
ARM:指令只能是小端字节序,数据的大小端模式是可切换的:默认为小端字节序,可通过汇编指令SETEND切换数据的大小端模式,例如SETEND BE切换为大端字节序,SETEND LE切换为小端字节序。ARM CPU内部是使用CPSR的E比特位表示大小端字节序的,SETEND修改也就是该比特位。
边栏推荐
- How to use Pinia (I) introduce Pinia into the project
- Leetcode 718. Longest repeating subarray (violence enumeration, to be solved)
- Can I open an account for stock trading on my mobile phone? Is it safe to open an account for stock trading on the Internet
- [interface] pyqt5 and swing transformer for face recognition
- typora设置标题自动编号
- 颜色搭配和相关问题
- 万字详解-MindArmour 小白教程!
- 【Try to Hack】正向shell和反向shell
- 一篇文章带你学会容器逃逸
- 超硬核!华为智慧屏上的家庭相册竟可以自动精准分类?
猜你喜欢

浅谈分布式系统开发技术中的CAP定理

泰国安全又划算的支付方式

国产框架MindSpore联合山水自然保护中心,寻找、保护「中华水塔」中的宝藏生命

go中的微服务和容器编排

技术干货|什么是大模型?超大模型?Foundation Model?

Solid and ambient colors

A simple and crude method for exporting R language list to local

Introduction to software engineering -- Chapter 4 -- formal description technology

Understanding of "the eigenvectors corresponding to different eigenvalues cannot be orthogonalized"

Unity4.6版本下载
随机推荐
Nacos安装指南
微信小程序自动生成打卡海报
Electronic Society C language level 1 31. Calculate line segment length
[710. random numbers in the blacklist]
[微服务]Eureka
Le principe le plus complet de formation à la précision hybride pour l'ensemble du réseau
【710. 黑名单中的随机数】
Is it reliable to open an account for stock trading on the mobile phone? Is it safe to open an account for stock trading on the Internet
CVE-2022-30190 Follina Office RCE分析【附自定义word模板POC】
Serial port debugging tool mobaxtermdownload
Is it safe to open an account on the mobile phone to buy stocks? Is it safe to open an account on the Internet to speculate in stocks
软件工程导论——第四章——形式化说明技术
typora设置标题自动编号
Safe and cost-effective payment in Thailand
Alibaba cloud server purchase, basic configuration, (xshell) remote connection and environment building
CVPR2022-不对称分辨率图像的立体匹配
Installation of xshell and xftp
全網最全的混合精度訓練原理
手机炒股靠谱吗 网上开户炒股安全吗
Solid and ambient colors