最近遇到一个问题,在Linux环境上进程获取对端消息包,解析对应结构体的包头时出现了问题,本来应该是12的内容,却读取出了3072。
当时第一反应是出现了偏移,从0x000C读取成了0x0C00,结果验证了多次,查看对端发包的内容,都不是偏移。
后来才发现,对端在发送消息时,存储的内容是主机字节序----也就是小端字节序。而在发送前使用htonl,转换成了网络字节序—也就是大端字节序。而在读取的时候,并没有对其进行转换。这也就解释了为什么0x000C读取成了0x0C00。
这里涉及Linux 下的 Socket编程,后续继续学习这个部分。