网络字节序与主机字节序的转换

什么是字节序?

  字节序指字节在内存中存储的顺序。字节序有两种:
(1)小端字节序(Little endinan),数值低位存储在内存的低地址,高位存储在内存的高地址;
(2)大端字节序(Big endian),数值高位存储在内存的低地址,低位存储在内存的高地址。

  主机字节序,即CPU存储数据时采用的字节顺序;网络字节序,是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。

 

为什么要进行转换?

  在进行网络编程时,由于网络字节的顺序和主机的字节顺序可能存在不同,需要进行转换以统一“格式”。

 

常用的系统调用

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong); //把uint32_t类型从主机序转换到网络序
uint16_t htons(uint16_t hostshort); //把uint16_t类型从主机序转换到网络序
uint32_t ntohl(uint32_t netlong); //把uint32_t类型从网络序转换到主机序
uint16_t ntohs(uint16_t netshort); //把uint16_t类型从网络序转换到主机序

 

posted @ 2022-10-09 11:53  vasilizzz  阅读(184)  评论(0)    收藏  举报