C语言深度解析:大小端字节序——多字节数据的底层存储规则

简介: 大小端指CPU对多字节数据在内存中的存放顺序:大端高字节存低地址,小端反之。x86/ARM默认小端,网络字节序统一为大端。跨平台、网络通信、二进制协议开发中必须显式处理字节序转换,否则数据解析必错。

大小端是CPU对多字节数据在内存中的存放顺序,是嵌入式、网络通信、二进制协议开发中必踩的底层知识点,与语法无关,却直接决定数据解析是否正确。

一、大小端的本质

  • 大端序(Big-Endian)
    数据高字节存低地址,低字节存高地址,和人类书写顺序一致。
    例:0x12345678 → 内存:12 34 56 78

  • 小端序(Little-Endian)
    数据低字节存低地址,高字节存高地址。
    x86、ARM 等主流 CPU 默认都是小端
    例:0x12345678 → 内存:78 56 34 12

二、C 语言判断大小端(最简代码)

利用 union 共享内存特性,直接读取首字节判断:

#include <stdio.h>

int is_little_endian() {
   
    union {
   
        int  n;
        char c;
    } u;
    u.n = 1;
    // 首字节为1 → 小端;为0 → 大端
    return u.c == 1;
}

int main() {
   
    if (is_little_endian())
        printf("小端序\n");
    else
        printf("大端序\n");
    return 0;
}

三、最容易踩坑的 3 个场景

  1. 网络传输
    网络字节序统一为大端,本机发数据必须用 htons / htonl 转序,接收用 ntohs / ntohl 转回,否则数据乱码。

  2. 二进制文件/Flash 存储
    不同架构设备读写同一文件,不做字节序转换,解析结果完全错误。

  3. 指针强转解析多字节数据
    直接用 char* 读取 int 数据时,大小端不同,取出的字节顺序完全相反。

四、总结

大小端是硬件架构决定的内存规则,不是 C 语言语法,但直接影响跨平台、网络、底层数据交互。
写底层协议、驱动、跨端数据交互时,永远假设大小端未知,用通用转序逻辑,才是稳健的 C 语言开发思路。

相关文章
|
存储 小程序 编译器
数据的存储--大小端
数据的存储--大小端
992 0
|
2月前
|
存储 网络协议 安全
C语言深度解析:位域的底层逻辑与跨平台避坑指南
位域是C语言专为bit级内存操控设计的特性,用于嵌入式寄存器映射、协议解析等场景,可大幅节省内存。但其布局受编译器、字节序、对齐规则影响,存在有符号陷阱、跨平台不一致、不可取地址等风险。慎用,优先选unsigned int,跨平台务必改用位运算。
|
2月前
|
存储 机器学习/深度学习 人工智能
大模型应用:大模型本地部署的磁盘空间优化:模型分片存储与按需加载.48
本文详解大模型本地部署的磁盘与显存优化方案:通过分片存储(将大模型切分为多个小文件)与按需加载(运行时动态加载所需分片),显著降低硬件门槛。以Qwen1.5-1.8B为例,完整演示分片生成、索引构建、完整性校验、加载测试及跨分区部署,确保效果不降、资源占用大减。
548 20
|
存储 缓存 固态存储
SSD的原理和结构简介
SSD如淡雅之兰花,寻求内外统一,内涵与外在俱佳,除了英俊潇洒的外表,内在的魅力同样不可抵挡。
|
2月前
|
存储 缓存 Java
Java 对象内存布局:从堆内存储到伪共享优化的底层真相
Java对象内存布局是JVM核心基础:含对象头(Mark Word+Klass指针)、实例数据(字段重排序优化)和对齐填充(8字节对齐)。它直接影响内存占用、GC效率、锁升级与伪共享性能。掌握此机制,是深入理解并发优化(如@Contended)、指针压缩及高性能编程的必经之路。(239字)
421 111
|
2月前
|
人工智能 API iOS开发
OpenClaw 阿里云/本地零基础喂饭级部署+配置免费大模型API+集成Obsidian CLI,让AI用你的知识库创作!
而Obsidian 1.12版本推出的官方CLI(命令行界面),彻底打通这一断点:AI Agent无需搬运数据,可直接调用Obsidian原生索引,实现毫秒级检索、反向链接查询、标签筛选等功能,4663个文件的知识库检索仅需0.26秒,比逐文件扫描快60倍,token消耗降低99%。本文基于实测经验,整合四大核心内容:一是2026年OpenClaw全平台部署流程(阿里云+MacOS+Linux+Windows11);二是阿里云百炼免费大模型API配置步骤;三是Obsidian CLI启用与OpenClaw联动实战;四是新手高频问题解答,所有代码可直接复制执行,无营销词汇,助力零基础用户1-2小
1402 24
|
3月前
|
存储 编译器 程序员
C语言核心剖析:堆与栈的本质差异及避坑指南
C语言中,栈与堆是内存管理的两大核心区域:栈由编译器自动管理,高效但易栈溢出;堆由程序员手动管理,灵活却易致内存泄漏、野指针等陷阱。本文深入剖析二者本质差异与典型风险,助你夯实底层基础。
864 11
|
2月前
|
存储 网络协议 安全
C语言「内存对齐潜规则」:结构体里看不见的填充字节
内存对齐是CPU硬件要求的数据地址约束规则:变量须存于其字节大小的整数倍地址。编译器自动插入填充字节确保对齐,导致结构体体积“膨胀”、硬件寄存器读写错位或协议异常。合理排序成员(从大到小)、慎用`packed`、明确对齐控制,是嵌入式与底层开发的关键避坑要点。(239字)
|
2月前
|
缓存 编译器 程序员
C语言深度解析:restrict关键字——编译器性能优化的终极钥匙
C99的`restrict`关键字是C语言性能优化的“终极钥匙”:它向编译器承诺指针独占访问内存,彻底解决同类型指针别名问题,解锁循环向量化、寄存器缓存等激进优化。滥用致未定义行为,善用则性能飙升数倍——这才是真正高阶C程序员的必修课。(239字)
|
1月前
|
机器学习/深度学习 存储 缓存
大模型架构算力对比:Decoder-only、Encoder-Decoder、MoE深度解析.71
本文深入解析三大主流大模型架构(Decoder-only、Encoder-Decoder、MoE)的算力消耗差异,聚焦注意力机制复杂度、参数量与计算密度三大维度。通过公式推导、代码模拟与可视化图表,揭示MoE稀疏激活的显著节算优势及瓶颈,剖析长文本场景下的“平方级算力黑洞”成因,并提供面向不同场景的架构选型建议。
572 20