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

大小端的判断方法

大小端(Endianness) 是计算机存储多字节数据(如整数、浮点数)时的两种不同方式,决定了字节在内存中的排列顺序。


1. 大端(Big-Endian)

  • 高位字节存储在低地址,低位字节存储在高地址。
  • 示例:整数 0x12345678(十六进制)在内存中的存储(地址从低到高):
    低地址 → 0x12 | 0x34 | 0x56 | 0x78 → 高地址
    

2. 小端(Little-Endian)

  • 低位字节存储在低地址,高位字节存储在高地址。
  • 示例:整数 0x12345678 在内存中的存储(地址从低到高):
    低地址 → 0x78 | 0x56 | 0x34 | 0x12 → 高地址
    

如何判断大小端?

方法 1:通过代码检测

利用指针直接查看内存中第一个字节的值:

#include <stdio.h>int main() {unsigned int num = 0x12345678;unsigned char *p = (unsigned char *)#if (*p == 0x78) {printf("Little-Endian\n");} else if (*p == 0x12) {printf("Big-Endian\n");}return 0;
}
  • 小端系统:第一个字节是 0x78(低位)。
  • 大端系统:第一个字节是 0x12(高位)。

方法 2:使用联合体(Union)

联合体共享内存空间,可同时用整数和字符数组访问同一数据:

#include <stdio.h>union EndianCheck {int num;char bytes[4];
};int main() {union EndianCheck ec;ec.num = 0x12345678;if (ec.bytes[0] == 0x78) {printf("Little-Endian\n");} else {printf("Big-Endian\n");}return 0;
}

为什么需要区分大小端?

  • 跨平台数据传输:不同设备可能字节序不同(如 Intel CPU 用小端,网络传输用大端)。
  • 文件格式解析:如 BMP 图片、二进制文件需按指定字节序读取。

常见系统示例

  • 小端:x86/x64(Intel/AMD)、ARM(通常可配置)。
  • 大端:网络传输(TCP/IP 协议)、PowerPC、SPARC。

理解大小端对处理底层数据至关重要!

相关文章:

  • cursor对话关键词技巧
  • spring boot3.0自定义校验注解:文章状态校验示例
  • PH热榜 | 2025-05-12
  • 前端vue+elementplus实现上传通用组件
  • SHAP分析!Transformer-GRU组合模型SHAP分析,模型可解释不在发愁!
  • HDFS客户端操作
  • 排查服务器内存空间预警思路
  • AI日报 - 2024年05月13日
  • 航电系统之电传飞行控制系统篇
  • Excel VBA 与 AcroForm 文档级脚本对比
  • MCU开启浮点计算FPU
  • [springboot]SSM日期数据转换易见问题
  • Linux电源管理(五),发热管理(thermal),温度控制
  • C 语 言 - - - 简 易 通 讯 录
  • Python 字符串
  • 【Linux 系统调试】syslog:Linux 系统日志工具详解
  • c++STL-vector的模拟实现
  • 开关电源滤波器讲解
  • 鲁滨逊归结原理详解:期末考点+解题指南
  • c++刷题便捷函数(类似于stoi的小函数)
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 小米SU7 Ultra风波升级:数百名车主要求退车,车主喊话雷军“保持真诚”
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 专访|韩国世宗研究所中国研究中心主任:李在明若上台将推行均衡外交