C语言中的大小端,一篇让你彻底搞懂

发布时间:2026/7/14 2:21:43

C语言中的大小端,一篇让你彻底搞懂 一、什么是大小端想象一下你有一个 16 位的数字 0x1234它需要存到内存里。内存是按字节编址的一个字节只能存 8 位所以 0x1234 要拆成两个字节0x12高字节和 0x34低字节。问题来了先存高字节还是先存低字节大端Big-Endian高字节放低地址符合人类阅读习惯先高位小端Little-Endian低字节放低地址符合计算机处理习惯举例地址 0x100 0x101 大端 0x12 0x34 小端 0x34 0x12二、为什么会有大小端大端网络协议、ARM默认、某些RISC方便人类调试数值顺序和书写一致。小端x86Intel/AMD采用因为CPU从低地址取数据更快做加法进位也更自然。没有谁对谁错只是设计哲学不同。三、C语言中怎么判断大小端最简单的方法用联合体union。#include stdio.h int is_little_endian() { union { int i; char c; } u; u.i 1; // 0x00 00 00 01 return u.c 1; // 低地址取到的是低位字节 } int main() { if (is_little_endian()) printf(小端\n); else printf(大端\n); return 0; }原理int 占4字节char只取第一个字节。如果u.c 1说明最低有效字节在低地址 → 小端。也可以用指针强制转换int a 1; char *p (char*)a; if (*p 1) // 小端四、写代码时需要注意什么网络字节序是大端所以发送多字节数据前要用 htonl() / htons() 转换。文件存储跨平台读写二进制文件时要约定好字节序否则读出来是乱的。位域bit-field 在不同端序下布局可能不同尽量少用。五、一句话总结大端 高字节在前地址低→高像读书从左到右。小端 低字节在前像CPU从低位算起。记住x86是小端网络是大端。判断就用 union 或指针取第一个字节。好了就这么多。下次面试再问直接甩代码给他看 如果你觉得有帮助欢迎点赞、收藏、评论让更多人看到

相关新闻