搞懂网络编程:字节序与 IP 地址转换全攻略

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

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

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

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

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


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

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

关键字 英文全称 含义
h host 主机(本地字节序)
n net 网络(网络字节序)
s short 16位整数(通常用于 端口号
l long 32位整数(通常用于 IPv4 地址

组合示例

  • htons: Host to Net Short (把本地端口转为网络端口)
  • ntohl: Net to Host Long (把网络收到 IP 包转为本地整数)

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

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

代码示例 (endian_convert.c)

#include <stdio.h>
#include <arpa/inet.h>

int main() {
   
   
    // 1. 端口转换 (16位)
    // 假设端口号是 0x1234 (十进制 4660)
    unsigned short host_port = 0x1234;
    unsigned short
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值