当前位置: 首页 > news >正文

什么是大端?什么是小端?如何验证?

什么是大端?什么是小端?如何验证?

在计算机系统中,大端(Big-Endian)小端(Little-Endian) 是两种不同的字节序(Byte Order),用于描述多字节数据在内存中的存储方式。

1. 大端(Big-Endian)

  • 定义:高位字节存于低地址,低位字节存于高地址。

  • 类比:类似人类读写数字的习惯(从左到右,先高位后低位)。

  • 示例

    :对于 32 位整数0x12345678(十六进制),大端存储方式如下:

    内存地址(由低到高)存储内容(1 字节)
    0x00000x12(高位)
    0x00010x34
    0x00020x56
    0x00030x78(低位)

2. 小端(Little-Endian)

  • 定义:低位字节存于低地址,高位字节存于高地址。

  • 类比:与人类习惯相反,先存储低位字节。

  • 示例

    :同样对于0x12345678,小端存储方式如下:

    内存地址(由低到高)存储内容(1 字节)
    0x00000x78(低位)
    0x00010x56
    0x00020x34
    0x00030x12(高位)

3. 验证方法

通过代码可以验证当前系统的字节序,核心思路是:

  • 定义一个多字节变量(如 int)。
  • 用字符指针(char*)逐个访问其字节,观察存储顺序。
示例代码(C 语言):
#include <stdio.h>int main() {int num = 0x12345678;  // 定义一个32位整数char *p = (char*)&num; // 用字符指针访问其字节// 打印每个字节的十六进制值printf("字节顺序(低地址到高地址):\n");printf("0x%x\n", p[0]);  // 低地址printf("0x%x\n", p[1]);printf("0x%x\n", p[2]);printf("0x%x\n", p[3]);  // 高地址// 判断字节序if (p[0] == 0x78 && p[3] == 0x12) {printf("当前系统为小端(Little-Endian)\n");} else if (p[0] == 0x12 && p[3] == 0x78) {printf("当前系统为大端(Big-Endian)\n");} else {printf("未知字节序\n");}return 0;
}
示例代码(Python):
import sys# 方法1:使用sys.byteorder
print("sys.byteorder结果:", sys.byteorder)  # 小端返回"little",大端返回"big"# 方法2:手动验证
num = 0x12345678
# 将整数转换为4字节的字节串(默认大端,需指定小端参数验证)
bytes_big = num.to_bytes(4, byteorder='big')
bytes_little = num.to_bytes(4, byteorder='little')# 获取系统存储的实际字节
import ctypes
p = ctypes.cast(ctypes.pointer(ctypes.c_int(num)), ctypes.POINTER(ctypes.c_char * 4)).contents
actual_bytes = bytes(p)if actual_bytes == bytes_big:print("当前系统为大端(Big-Endian)")
elif actual_bytes == bytes_little:print("当前系统为小端(Little-Endian)")

4. 常见应用场景

  • 硬件:x86、ARM(默认)等架构使用小端;PowerPC、SPARC 等使用大端。
  • 网络协议:TCP/IP 协议规定使用大端(称为 “网络字节序”),因此跨平台通信时需转换。
  • 文件格式:部分格式(如 BMP 图像)使用小端,部分(如 JPEG、PNG)使用大端。
http://www.dtcms.com/a/310560.html

相关文章:

  • MySQL相关概念和易错知识点(3)(表内容的CURD、内置函数)
  • 基于CNN卷积神经网络图像识别28个识别合集-视频介绍下自取
  • Tushare 行情数据完整性同步算法
  • 三轴云台之热成像伪彩模式篇
  • 【Lua】题目小练7
  • Nestjs框架: 请求生命周期与应用生命周期
  • Vue模板语法详解:从基础到进阶的响应式绑定指南1
  • 工业数采引擎-DTU
  • CSS属性值计算规则:从声明到渲染的精确过程
  • 《C++》STL--list容器详解
  • 【读文献】Capacitor-drop AC-DC
  • 移除 Excel 文件(.xlsx)的工作表保护
  • Ubuntu 系统下使用 lsusb 命令识别 USB 设备及端口类型详解
  • 从“多、老、旧”到“4i焕新”:品牌官方商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • 数据结构与算法——字典(前缀)树的实现
  • Rockchip RK3568J +FPGA边缘智能系统及储能网关
  • 以太网是什么网,什么网是以太网
  • spring cloud alibaba ——sidecar服务异构
  • Vite+React组件库提速方案
  • 区块链概述
  • 嵌入式 C 语言入门:函数封装与参数传递学习笔记 —— 从定义到内存机制
  • Syzkaller实战教程6:[重要]初始种子加载机制剖析第二集
  • 如何理解卷积,和自注意力机制的局限与优势(个人理解)
  • C++中typename基本用法
  • Nastool+cpolar:群晖NAS用户的全场景影音自由方案
  • 理解HTTP协议
  • 网络配置+初始服务器配置
  • Effective C++ 条款15:在资源管理类中提供对原始资源的访问
  • 在 Docker 中启动 Nginx 并挂载配置文件到宿主机目录
  • MyBatis知识点