htons(), ntohs(),htonl(),ntohl(), inet_addr() ,inet_ntoa() || bzero()

本文介绍了网络字节序与主机字节序的区别,详细解析了用于处理这两种字节序转换的函数如htonl(), ntohl(), htons(), ntohs()。同时,还介绍了处理IP地址的函数如inet_aton(), inet_addr(), inet_ntoa(),并推荐使用inet_pton()和inet_ntop()这两个更现代的函数。

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

1. htonl()  , ntohl() ,htons(),ntohs()

#include <netinet/in.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

htonl() :“Host to Network Long int”    32Bytes

ntohl() :“Network to Host  Long int”  32Bytes

htons():“Host to Network Short int”  16Bytes

ntohs():“Network to Host Short int”  16Bytes


网络字节顺序NBO(Netwoork Byte Order):按从高到低的顺序存储

主机字节顺序HBO(Host Byte Order):不同的CPU,存储方式不同


2 inet_addr() , inet_ntoa(),inet_aton()

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

// ALL THESE ARE DEPRECATED!  Use inet_pton()  or inet_ntop() instead!!

char *inet_ntoa(struct in_addr in);
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);


inet_aton()将strptr所指的字符串转换位32位网络字节序二进制,并有addptr指针来存储,返回值位1表示成功,为0表示失败。


inet_addr()返回转换后的32位网络字节序二进制,返回的IP地址为0.0.0.0到255.255.255.255,如果函数出错,返回INADDR_NONE,意味着点分二进制数串255.255.255.255不能由此函数处理。


inet_ntoa()将一个32位的网络字节序二进制IPV4地址转换为相应的点分十进制数串。


inet_pton()和inet_ntop()对IPv4和IPv6地址都能进行处理,p表示presentation,字母n代表numeric

#include<arpa/inet.h>

/*若函数成功,则返回1,若输入不是有效的格式,则函数返回0,;若处理失败,函数返回-1 */
int inet_pton(int family,const char * strptr,void * addrptr);

/*若函数处理成功,返回指向结果的指针,若失败,返回NULL */
const char* inet_ntop(int family, const void* addrptr, char* strptr,size_t len);

inet_pton()转换strptr指针指向的串,并通过addrptr存储二进制结果。

inet_ntop()从二进制数值格式addrptr字符串到转换为点分十进制字符串strptr,参数len是目标的大小,以免函数出现溢出

inet_pton()则是将点分十进制字符串strptr转换为二进制形式的字符串。


3. bzero():将内存(字符串)前n个字节清零

void bzero(void* s,int n)

等价于memset((void*)s,0,size_t n),用来将内存块的前n个字节清零。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值