首先需要了解下大端和小端存储的区别:
大端方式:用存储器的低字节地址单元来存放数据的最高字节
小端存放:用存储器的低字节地址单元来存放数据的最低字节
如下图所示:
网络上都是以字节流的方式传输数据的,网络字节顺序是网络传输时的字节序,按照TCP/IP协议是按照大端字节序传输方式,也就是高字节先走(先传12,接着34,56,78),确保双方解析对应即可。
网络字节序是大端字节序,我们经过网络发送整型数值0x12345678时,在X86平台中它是以小端发存放的,在发送之前需要使用系统提供的,字节序转换函数htonl(),将其转换成大端法存放的数值;
转换代码(C++):
template<typename Num>
void NetworkToHost(const uint8_t* src, Num& num)
{
size_t sizeOfNum= sizeof(num);
if (IsLittleEndian())
{
uint8_t* dst = reinterpret_cast<uint8_t*>(&num) + sz - 1;
for (size_t i = 0; i < sizeOfNum; ++i)
{
*dst-- = *src++;
}
}
else
{
memmove(&num, src, sizeOfNum);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)