首页 > 编程知识 正文

ipv6字节序转换,主机序与网络序怎么判断

时间:2023-05-05 10:22:16 阅读:162635 作者:2523

目前的通信方式趋于多样化,手机和电脑的qq通信等异构通信(计算机软件(操作系统)、计算机硬件)、内核体系结构、ARM、x86 )不同)也很普遍

另外,计算机设计之初,对存储器内数据的处理方法也不同。 (下游地址包含下游数据或下游地址包含上游数据),但正在通信)对于ISO/OSI和TCP/IP层模型,数据进一步封装(然后添加至报头)并添加至目标段

综上所述,数据传输的过程,一定有一个标准化的过程。 即,从主机a到主机b通信

的固有数据存储库-----标准化-----向固有格式的转换

如上所述,a或b的唯一数据存储格式是它自己的主机字节序,以及上述标准化是网络字节序(即大字节序)

的主机字节序--------网络字节序--------的主机字节序

主机字节序:

在自己的主机内部。 内存中数据的处理方法分为以下两种。

大字节序(big-endian )根据内存的增长方向,高位数据存储在低位内存中

小端序(little-endian )根据内存的增长方向,高位数据存储在低位存储器中

但是,你怎么知道我们的主机就是那样的? 这可以通过程序进行验证:

span style='font-size:18px;' # include stdio.h # include arpa/inet.hint main () { unsigned long a=0x12345678; 无符号char * p=(无符号char * ) ) a; 打印(主机字节顺序: %0x %0x %0x %0x (0x (n ),p[0],p[1],p[2],p[3] ); 未注册的long b=htonl (a; //将主机端序转换为网络端序p=(unsignedchar* ) ) b ); printf (按网络字节顺序: %0x %0x %0x %0x (0x (n ),p[0],p[1],p[2],p[3] ); 返回0; (} /span的执行结果:

目前的主机是小端序

:关于htonl

span style='font-size:18px;' # include arpa/inet.Hu int 32 _ t htonl (uint 32 _ t hostlong ); uint 16 _ th tons (uint 16 _ t hostshort; uint32_tntohl(uint32_tnetlong; uint16_tntohs(uint16_tnetshort ); /span

h是主机host,n是网络net,l是长整形长,s是短整形短,所以上述函数还可以很好地理解

span style='font-size:18px;' # include stdio.h # include arpa/inet.hint main ({ struct in _ addr IP addr; unsigned long addr=inet _ addr (192.168.1.100 ); printf(addr=%u(n ),ntohl ) ) addr ); ipaddr.s_addr=addr; printf(%s(n ),inet_ntoa ) IPaddr ); 返回0; (} /span的执行结果:

值得注意的是:

in _ addr _ ininet _ addr (const char * strptr );

inet_addr参数是以点分隔的十进制字符串,返回的值是32位二进制网络字节序的IPv4地址。 否则,为INADDR_NONE

返回值为in_addr_t:IPv4,通常为uint32_t

因此,也可以定义为无符号龙

char * inet _ ntoa (struct in _ addrinaddr );

因为参数是结构,所以要调用它,必须首先定义结构。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。