在操作系统中,有大端存储和小端存储两种主要的存储方式。在不同的系统间进行数据传输时,需 要注意进行本机字节序和网络字节序之间的相互转换。在调用 send 和 write 函数时,如果不调用 htons或 htonl函数将本机字节序转换为网络字节序,会造成数据错误,进而导致预料之外的行为。
对于向外部系统传输数据前应该转换为网络字节序的情况,示例1给出了不规范用法(C/C++ 语言)示例。示例2给出了规范用法(C/C++ 语言)示例。
示例1:
void bad1(int s, short x){
short u = x+12;
send(s,&u,sizeof(u),0);//<==error
在调用 send 函数之前,没有调用htons 或 htonl函数将 u 转换为网络字节序。
示例2:
void good1(int s,short x){
short u = x+12;
short v = htons(u);
send(s,&.v, sizeof(v),0);// ok
在外部系统传输数据前调用系统 API(htons、htonl) 进行数据字节序转换,然后再发送数据。