首页 > 其他分享 >网络字节序与主机字节序的转换函数实践

网络字节序与主机字节序的转换函数实践

时间:2022-10-07 21:24:13浏览次数:40  
标签:const 字节 主机 void addrptr 函数 inet strptr

1 #include <netinet/in.h>
2 unit16_t htons(uint16_t host16bitvalue);
3 uint32_t htonl(uint32_t host32bitvalue);  //均返回网络字节序的值
4 unit16_t ntohs(uint16_t net16bitvalue);
5 uint32_t ntohl(uint32_t net32bitvalue);   //均返回主机字节序的值

  h代表host,n代表network,s代表short,l代表long。如果长整型占用64位,htonl和ntohl操作的仍然是32位的值。

  源自berkeley的字节操纵函数:

1 #include <string.h>
2 void bzero(void *dest, size_t nbytes);
3 void bcopy(const void *src, void *dest, size_t nbytes);
4 int bcmp(const void *ptr1, const void *ptr2, size_t nbytes);

  地址转换函数:

1 #include <arpa/inet.h>
2 int inet_aton(const char *strptr, struct in_addr *addrptr);
3 in_addr_t inet_addr(const char *strptr);
4 char* inet_ntoa(struct in_addr inaddr);

  inet_aton将strptr所指c字符串转换成一个32位的网络字节序二进制值,并通过addrptr指针来存储。成功返回1,否则返回0.

  inet_ntoa将一个32位的网络字节序二进制IPV4地址转换成相应的点分十进制数串。由于返回值所指向的字符串驻留在静态内存中,所以该函数是不可重入的。

1 #include <arpa/inet.h>
2 int inet_pton(int family, const char* strptr, void *addrptr);
3 const char* inet_ntop(int family, const void* addrptr, char* strptr, size_t len);

  这两个函数的family参数可以是AF_INET、AF_INET6。如果以不支持的地址族作为这个参数,返回一个错误,erron置为EAFNOSUPPORT。

  inet_pton尝试转换strptr所指字符串,并将二进制结果存放在addrptr中,成功返回1,失败返回0.

  inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达格式(strptr)。len参数是目标存储单元的大小,以免溢出其调用者的缓冲区。调用陈宫时strptr就是这个函数的返回值

  一般有如下定义:

1 #include<netinet/in.h>
2 #define INET_ADDRSTRLEN 16 //for IPv4 dotted-decimal
3 #define INET6_ADDRSTRLEN 46 //for IPv6 hex string

 

标签:const,字节,主机,void,addrptr,函数,inet,strptr
From: https://www.cnblogs.com/royol/p/16764400.html

相关文章

  • 字节还行
    计算机本科应届生年薪30w40w真的很普遍吗必然不是普遍情况,金字塔腰部和顶端的竞争永远激烈真正优秀的人才在全局来看、永远不到5%高校层次、实验室就业质量、按比例退减不......
  • 网络字节序与主机字节序的相互转换
    1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在......
  • 网络字节序与主机字节序的转换函数实践
    1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。2、主机字节序:即大端(BigEndian)......
  • 函数和虚函数对struct结构体大小的影响
    编者:李国帅时间:20背景:在网络传输程序中,往往把数据封装到结构体中统一传输,这时候,结构体的大小就会很重要,不注意的话,容易造成数据的丢失或者溢出。在实际的使用中要注意分析V......
  • 从头开始学MySQL-------存储过程与存储函数(1)
     10.1.1 创建存储过程    存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。    创......
  • 关于青云-windows-server-服务器不能连接外网主机的远程桌面
    今天笔者,准备使用青云上的一台windows虚拟机,使用远程桌面连接笔者的其他windows服务器却始终连接不通,通过telnet也测试了、连接外部windows主机的TCP/3389就是不通最后在......
  • 主机字节序和网络字节序转换函数
    #include<arpa/inet.h>uint32_thtonl(uint32_thostlong);<主机字节序转换位网络字节序32,转换IP地址时用>uint16_thtons(uint16_thostshort);<主机字节序16位转换为网......
  • Oracle函数
    Oracle函数一、日期函数  TO_DATE格式(以时间:2007-11-02  13:45:25为例)       Year:             yytwodigits两位年       ......
  • 网络字节与主机节序的转换函数实践
    #include<netinet/in.h>unit16_thtons(uint16_thost16bitvalue);uint32_thtonl(uint32_thost32bitvalue);//均返回网络字节序的值unit16_tntohs(uint16_tnet16bit......
  • Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
    Oracle使用正则表达式离不开这4个函数:1、regexp_like2、regexp_substr3、regexp_instr4、regexp_replace看函数名称大概就能猜到有什么用了。regexp_like只能用于条件表达......