字节序与网络字节序

CPU向内存保存数据的方式有2种,这意味着CPU解析数据的方式也分为2种

大端序:高位字节存放到低位地址

小端序:高位字节存放到高位地址

假设在0x20号开始的地址中保存4字节int类型数0x12345678,大端序CPU保存方式如下:

0x20号     0x21号     0x22号     0x23号

  0x12          0x32        0x56         0x78

整数0x12345678, 0x12是最高位字节,0x78是最低位字节。因此大端中先保存最高位字节0x12,

小端序保存方式如下:

 0x20号     0x21号     0x22号     0x23号

  0x78          0x56        0x34         0x12

先保存的是最低位字节0x78,每种CPU的保存方式均不同,目前主流的Intel系列CPU以小端序方式保存数据

网络字节序统一为大端序

s指的是short,l指的是long(linux中long占4个字节),htons解释为把short型数据从主机字节序转化为网络字节序,

ntohs解释为把short型数据从网络字节序转化为主机字节序

in_addr_t inet_addr(const char *string);

将字符串形式的ip地址转化为32位整型数据,该函数在转换过程中同时进行网络字节序转换,成功时返回32位整型数,失败时会返回INADDR_NONE

 

int inet_aton(const char *string, struct in_addr *addr);

此函数会自动把ip地址填入该结构体变量

atoi把字符串类型转换为整数型

 

你可能感兴趣的:(C++)