搞懂网络编程:字节序与 IP 地址转换全攻略
2026/4/17 22:14:24 网站建设 项目流程

各类资料学习下载合集
链接:https://pan.quark.cn/s/7c8c391011eb

一、 为什么需要“翻译”?(大端与小端)

计算机在存储多字节数据(如整数)时,有两种流派:

  • 小端序 (Little-Endian)主机字节序。大部分 PC(x86 架构)默认采用。它是“低位在前”,例如0x1234存为34 12
  • 大端序 (Big-Endian)网络字节序。TCP/IP 协议规定,在网络上传输数据必须使用这种顺序。它是“高位在前”,例如0x1234存为12 34

结论:在发送 IP 地址(32位)和端口号(16位)之前,必须将它们从主机序转换为网络序,否则服务器根本认不出你是谁。


二、 转换函数的“助记词”解析

C 语言库提供了一组函数来完成这种转换。看似复杂,其实只要看懂函数名中的缩写,就能秒懂它们的用途:

关键字英文全称含义
hhost主机(本地字节序)
nnet网络(网络字节序)
sshort16位整数(通常用于端口号
llong32位整数(通常用于IPv4 地址

组合示例

  • htons:HosttoNetShort (把本地端口转为网络端口)
  • ntohl:NettoHostLong (把网络收到 IP 包转为本地整数)

三、 代码实战 1:端口与整形 IP 的转换

这个示例演示如何将本地的端口号和数字形式的 IP 地址转换为网络标准格式。

代码示例 (endian_convert.c)

#include<stdio.h>#include<arpa/inet.h>intmain(){// 1. 端口转换 (16位)// 假设端口号是 0x1234 (十进制 4660)unsignedshorthost_port=0x1234;unsignedshort

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

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

立即咨询