我想向服务器发送请求,但不知何故,Python将4Byte值转换为8字节值:
struct.pack("H", socket.ntohs(v1)) + struct.pack("?", v2) + struct.pack("?", v3) + struct.pack("L", socket.ntohl(v5)) + struct.pack("L", socket.ntohl(v6)) + struct.pack("L", socket.ntohl(v7)) + struct.pack("L", socket.ntohl(v8)) + struct.pack("H", socket.ntohs(v9))
直到v5一切正常但在v5之后我总是得到8Byte而不是4Bytes。 Wireshark捕获: 00 00 03 e8一切正常:
0040 4d 65 01 00 00 00 01 00 00 01 01 00 00 03 e8 00 Me...... ........
0050 00 00 00 00 00 07 d0 00 00 00 00 00 00 0b b8 00 ........ ........
0060 00 00 00 00 00 0f a0 00 00 00 00 13 88 00 00 00 ........ ........
答案 0 :(得分:0)
由于您没有另行说明,因此您使用的是long
的原生代表。尝试添加=
说明符(本机字节顺序,标准大小):
struct.pack("=H??LLLLH",
socket.ntohs(v1),
v2,
v3,
socket.ntohl(v5),
socket.ntohl(v6),
socket.ntohl(v7),
socket.ntohl(v8),
socket.ntohs(v9))
参考文献: