2024-04-29 13:21:34 发布
网友
我想用python创建一个包。数据包有4个字段,每个字段32位。我有样本代码:
import socket, sys, os, struct field1 = 1 field2 = '255.255.255.0' field3 = 20 field4 = '192.168.0.1' struct.pack=('!L4sL4s',field1,field2,field3)
但我没有输出。如何格式化此数据包,以便每个变量都有4个字节。
>>> struct.pack('!L4sL4s', field1, socket.inet_aton(field2), field3, socket.inet_aton(field4)) '\x00\x00\x00\x01\xff\xff\xff\x00\x00\x00\x00\x14\xc0\xa8\x00\x01'
调用pack的结果返回给您,您可以将其分配给变量。你的台词应该是这样的:
pack
my_packet = struct.pack('!L4sL4s',field1,field2,field3)
请注意,这一行需要一个无符号的长int,然后是长度为4的字符串,然后是长int,最后是长度为4的字符串。field2和field4都比这个长。例如,尝试使用len(field2)查看它的长度!
field2
field4
len(field2)
您正在将元组('!L4sL4s',field1,field2,field3)分配给struct.pack。您需要像这样调用struct.pack:struct.pack('!L4sL4s',field1,field2,field3,field4)(no=sign)。
('!L4sL4s',field1,field2,field3)
struct.pack
struct.pack('!L4sL4s',field1,field2,field3,field4)
调用
pack
的结果返回给您,您可以将其分配给变量。你的台词应该是这样的:请注意,这一行需要一个无符号的长int,然后是长度为4的字符串,然后是长int,最后是长度为4的字符串。
field2
和field4
都比这个长。例如,尝试使用len(field2)
查看它的长度!您正在将元组
('!L4sL4s',field1,field2,field3)
分配给struct.pack
。您需要像这样调用struct.pack
:struct.pack('!L4sL4s',field1,field2,field3,field4)
(no=sign)。相关问题 更多 >
编程相关推荐