字节序,地址转换

本文介绍了字节序的概念,包括大端和小端存储方式,并提供了验证主机字节序的方法。此外,还详细讲解了网络编程中常见的字节序转换函数如htons、htonl等,并提到了地址转换函数inet_pton和inet_ntop的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


字节序,地址转换

    字节序:是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺 序。两种格式:大端和小端。

小端:高地址存放高位数,低地址存放低位数

大端:高地址存放低位数,低地址存放高位数

    验证主机的字节序

#include<stdio.h>


int main()

{


int m = 0x1234;


char*p = (char *)&m;


printf(“%0x\n”,*p);


return 0;


}


输出结果为12时 为大端


输出结果为34时 为小端

算术运算与内存操作运算:算术运算是不改变被运算数据的字节序



    IP地址的字节序IP地址的整数值,自IP地址生成的时刻起,就一定是网络字节序的(大端)


    字节序转换函数OS一般都提供htonshtonlntohsntohl这四个字节序操作函数

#include<netinet/in.h>


主机字节序转换成网络字节序函数:

u_longhtonl(u_long hostlongvalue); 32


u_shorthtons(u_short hostshortvalue); 16


网络字节序转换成主机字节序函数:


u_longntohl(u_long netlongvalue); 32


u_shorthotns(u_short netshortvalue); 16


    地址转换函数


#include<arpa/inet.h>


将点分十进制数串转换成32位无符号整数


intinet_pton(int family, const char *strptr, void *addrptr);


family:协议族(AF_INETAF_INET6PF_PACKET),常用AF_INET

strptr:点分十进制数串

addrptr32位无符号整数的地址

成功返回1,失败返回其他


32位无符号整数转换成点分十进制数串


constchar *inet_ntop( int family, const void *addrptr,   char*strptr, size_t len );


family:协议族(AF_INETAF_INET6PF_PACKET),常用AF_INET

addrptr32位无符号整数

strptr:点分十进制数串

lenstrptr缓存区长度

len的宏定义

#defineINET_ADDRSTRLEN   16  // for ipv4

#defineINET6_ADDRSTRLEN  46  // for ipv6

成功返回首地址,否则为NULL









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值