彻底搞懂网络编程中的“字节序”与 IP 地址转换
2026/5/31 2:18:54 网站建设 项目流程

在网络通信中,字节序(Byte Order)决定了多字节数据(如int,short)在内存中是如何存放的。如果发送方和接收方的存储顺序不一致,数据就会像被“倒着读”一样,变成完全错误的值。

一、 大端 vs 小端:内存里的博弈

对于一个 4 字节整数0x12345678(十六进制),内存地址从低到高(0x00 -> 0x03),到底该怎么存?

模式名称存储规则 (笔记口诀)内存低地址 (0x00)内存高地址 (0x03)典型应用
小端序Little-Endian低低高高
(低位字节存低地址)
78(低位)12(高位)PC 机(x86/ARM)
大端序Big-Endian低高高低
(高位字节存低地址)
12(高位)78(低位)网络标准

核心结论

  1. PC 本地存储通常是小端序(反人类直觉)。
  2. 网络传输标准必须是大端序(符合人类直觉)。
  3. 单字节类型(如char, 字符串)不需要考虑字节序。

二、 代码实战 1:亲眼看看内存里的“倒序”

我们编写一段 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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询