最近和服务端做了socket通信,处理packet时遇到了二进制高位不统一的问题,
// iOS中len的二进制为0xff000000 (高位在后面)
// 但是传递到服务端 转换出的数字会变得非常大
uint32_t len = 255;
// 所以需要转换为 0x000000ff(高位在前面) 再传递到服务端 即:
len = htonl(len);
// 反过来转换用 ntohl()
后来查了下,其实是不同平台之间通信时就需要注意这个问题,有两个名词为网络字节序
和主机字节序
下面摘自百度百科:
[网络字节序]转化为[主机字节序]时,一定要注意是否需要转换。网络字节序是确定的。
[网络字节顺序]是TCP/IP中规定好的一种数据表示格式,它与具体的[CPU类型]、[操作系统]等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big-endian(大端)排序方式。
网友评论