详解大端序、小端序
大端序、小端序大端序和小端序是计算机科学中用来描述多字节数据如整数、浮点数在内存中如何存储和排列的规则1. 基础概念在计算机中内存是按字节编址的每个内存地址对应一个字节8位但很多数据类型如 Integer 32位整数、Double 64位浮点数需要占用多个字节。这就产生了一个问题这多个字节在内存中应该按照什么顺序排列为了说明这个问题我们需要定义最低有效字节LSB数据的“个位”或“低位”。例如十六进制数0x12345678中0x78是最低有效字节最高有效字节MSB数据的“最高位”。例如在0x12345678中0x12是最高有效字节2. 大端序核心规则高位字节存放在低地址低位字节存放在高地址通俗理解数据的存储顺序和人类阅读数字的顺序是一致的从左到右从高位到低位举个例子有一个十六进制数0x12345678占用4个字节12是最高位字节78是最低位字节假设我们要把它存入起始地址为0x100的内存中大端序的存储方式如下内存地址存储的字节0x100(低地址)12(最高位字节)0x101340x102560x103(高地址)78(最低位字节)3. 小端序核心规则低位字节存放在低地址高位字节存放在高地址通俗理解数据的存储顺序与人类阅读顺序相反最低位字节排在最前面举个例子有一个十六进制数0x12345678占用4个字节12是最高位字节78是最低位字节假设我们要把它存入起始地址为0x100的内存中小端序的存储方式如下内存地址存储的字节0x100(低地址)78(最低位字节)0x101560x102340x103(高地址)12(最高位字节)4. 常见的应用场景小端序是现代个人计算机和服务器的主流架构。比如 Intel/AMD 的 x86 和 x64 架构处理器默认使用的就是小端序。Windows、Linux 等操作系统大多运行在这些架构上大端序常用于网络数据传输和某些特定的处理器架构网络字节序在互联网协议IP、TCP、UDP 等中规定多字节数据必须使用大端序进行传输因此大端序在网络中被称为“网络字节序”历史与架构摩托罗拉 68K 系列、PowerPC 架构以及 Java 虚拟机JVM内部存储数据时使用的也是大端序5. 为什么会有这两种模式小端序的优势在进行数据类型转换时非常方便。例如同一个内存地址如果按32位整数读取是0x12345678如果强制按8位整数读取直接取低地址的第一个字节0x78即可不需要计算偏移量。强制转换数据类型时效率更高大端序的优势对人类来说更直观因为内存中的字节顺序和你写在纸上的数字顺序一致。此外在进行网络传输或按位运算时某些操作在硬件层面上更容易实现