stack.pack()或socket.ntohl()将4Byte转换为8Byte Python

时间:2014-03-26 15:31:46

标签: python sockets byte

我想向服务器发送请求,但不知何故,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   ........ ........

1 个答案:

答案 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))

参考文献: