字节序,地址转换

来源:互联网 发布:三维平面布置图软件 编辑:程序博客网 时间:2024/06/05 15:50


字节序,地址转换

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

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

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

    验证主机的字节序

#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









原创粉丝点击