0%

What is Network Byte Order

网络字节序

对于不同网络中的主机而言可能采用的平台都各不相同,而不同平台的主机在存储数据的方式也不同,一般分为两种方案:大端存储(Big_Endian)or 小端存储(Little_Endian)。

大端存储:数据的高字节数据存储在内存的低地址,如ARM平台就采用大端方式存储数据。

小端存储:数据的低字节数据存储在内存的低地址,比如X86平台就采用小端方式存储数据。

由于不同平台存储数据的方式不同,所以把数据封包发送出去,对方主机接收到数据包进行解包之后得到的原始数据的值可能含义完全不同,导致数据异常,所以为了统一标准,就设计出网络字节序,网络字节序统一采用大端方式传输数据。


相关函数

Linux系统提供很多函数实现把主机字节序转换为网络字节序也提供了函数接口实现把网络字节序转换为主机字节序,比如htons()、htonl()、ntohs()、ntohl()、inet_addr()等等

将点分十进制字符串”192.168.xxx.xxx”转换为网络字节序,inet_aton()、inet_addr()


字符串与基本数据类型转换函数

c语言库函数提供了一系列的函数方便我们进行字符串与基本数据类型之间的转换,比如atoi()、atof()、atol()函数等等

string和数值转换 转换类型
to_string(val) 把val转换成string
stoi(s,p,b) 把字符串s从p开始转换成b进制的int
stol(s,p,b) 把字符串s从p开始转换成b进制的long
stoul(s,p,b) 把字符串s从p开始转换成b进制的unsigned long
stoll(s,p,b) 把字符串s从p开始转换成b进制的long long
stoull(s,p,b) 把字符串s从p开始转换成b进制的unsigned long long
stof(s,p) 把字符串s从p开始转换成float
stod(s,p) 把字符串s从p开始转换成double
stold(s,p) 把字符串s从p开始转换成long double