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

通过代码识别大小端模式

判断系统字节序的方法

字节序(Endianness)分为大端(Big-Endian)和小端(Little-Endian)。大端模式将高位字节存储在低地址,小端模式将高位字节存储在高地址。可以通过代码检测当前系统的字节序。

使用联合体(Union)检测

通过联合体将整数和字符数组共享内存,检查整数低位字节的存储位置:

#include <stdio.h>int main() {union {int i;char c[sizeof(int)];} u;u.i = 1;if (u.c[0] == 1) {printf("Little-Endian\n");} else {printf("Big-Endian\n");}return 0;
}

使用指针强制类型转换

通过将整数的地址强制转换为字符指针,检查第一个字节的值:

#include <stdint.h>
#include <stdio.h>typedef uint32_t u32;int main() {uint8_t buffer[] = {0x12, 0x34, 0x56, 0x78}; // 小端序下表示 0x78563412uint32_t* msg = NULL;msg = buffer;u32 value = *(u32*)msg; // 强制转换并解引用printf("0x%x\n", value); // 输出结果依赖平台字节序return 0;
}

使用预定义宏

某些编译器提供预定义宏来检测字节序,例如 GCC 的 __BYTE_ORDER__

#include <stdio.h>int main() {#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__printf("Little-Endian\n");#elseprintf("Big-Endian\n");#endifreturn 0;
}

Python 实现

在 Python 中,可以使用 sys 模块检测字节序:

import sysif sys.byteorder == 'little':print("Little-Endian")
else:print("Big-Endian")

总结

以上方法可以快速检测当前系统的字节序。联合体和指针方法适用于 C/C++,而 Python 提供了更简单的内置支持。

http://www.dtcms.com/a/286952.html

相关文章:

  • 先让 AI 学会害怕,再让它握紧方向盘
  • Unity 多人游戏框架学习系列六
  • YT Config Tool 添加FreeRTOS模块
  • 【linux V0.11】kernel(水)
  • 2025年6月GESP(C++二级): 幂和数
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • Django母婴商城项目实践(五)- 数据模型的搭建
  • 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  • 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点
  • 枚举算法入门
  • 【2025/07/18】GitHub 今日热门项目
  • 北斗网格位置码详解:经纬度到二维网格码的转换(非极地)
  • 针对BERT模型的理解
  • 04-三思而后行:解锁AI的“内心戏”
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • bmp图像操作:bmp图像保存及raw与bmp转换
  • 二分答案之第 K 小/大
  • CMake指令:常见内置命令行工具( CMake -E )
  • 乙烯丙烯酸酯橡胶市场报告:性能优势、行业现状与发展前景​
  • selenium后续!!
  • 【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR
  • 语音直播和视频直播的测试要点
  • 【ROS1】06-ROS通信机制——话题通信
  • OOA、OOD 与 OOP:面向对象范式的核心支柱详解
  • 接口测试的原则、用例与流程详解
  • ModelSim 配合 Makefile 搭建 Verilog 仿真工程
  • Docker-下载和安装
  • ADVB协议内容分析
  • LeetCode Hot100【6. Z 字形变换】