我正在使用Python通过服务器和客户端应用程序之间的TCP套接字进行数据通信。我需要发送一个代表数据样本的4个字节。初始样本是32位无符号整数。如何通过套接字发送这4个字节的原始数据?
我想发送数据:0x12345678和0xFEDCBA98 通过套接字发送的原始数据应该是如果我在wireshark / tcpdump / etc上读取的那样。我不希望8个十六进制数中的每个值都表示为ascii字符,我希望原始数据保持不变。
谢谢
答案 0 :(得分:5)
在Python中发送二进制数据的主要方法是使用struct模块。
例如,打包3个4字节无符号整数就像这样
In [3]: struct.pack("III", 3, 4, 5)
Out[3]: '\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00'
请注意使用“<”,“>”等保持字节顺序正确。
答案 1 :(得分:0)
你可以使用bytes()。这就是我用来通过网络发送字符串的方法,但你也可以将它用于整数。它的用法是字节([3])
Edit:bytes将int(3)转换为字节。一串字节表示为b'\ x03'。就像你的字节串一样:0x12345678就是b'\ x12345678'
查看文档以获取更多信息: https://docs.python.org/3.1/library/functions.html#bytes