如何一键获取国家中小学智慧教育平台的所有电子课本?
2026/5/31 18:41:38
在网络通信中,字节序(Byte Order)决定了多字节数据(如int,short)在内存中是如何存放的。如果发送方和接收方的存储顺序不一致,数据就会像被“倒着读”一样,变成完全错误的值。
对于一个 4 字节整数0x12345678(十六进制),内存地址从低到高(0x00 -> 0x03),到底该怎么存?
| 模式 | 名称 | 存储规则 (笔记口诀) | 内存低地址 (0x00) | 内存高地址 (0x03) | 典型应用 |
|---|---|---|---|---|---|
| 小端序 | Little-Endian | 低低高高 (低位字节存低地址) | 78(低位) | 12(高位) | PC 机(x86/ARM) |
| 大端序 | Big-Endian | 低高高低 (高位字节存低地址) | 12(高位) | 78(低位) | 网络标准 |
核心结论:
char, 字符串)不需要考虑字节序。我们编写一段 C 代码,利用union(共用体)的特性,查看一个整数在内存中真正的字节排列,并演示htonl函数如何将其“修正”。
endian_view.c)#include<stdio.h>#include<arpa/inet.h>// 定义一个共用体:允许用两种方式访问同一块内存typedefunion{unsignedintvalue;// 4字节整数unsignedcharbytes[4];// 4字节数组(用于逐字节查看)}MemoryViewer;voidshow_memory(constchar*label,MemoryViewer mv