通过套接字(Python)发送二进制/十六进制



我正在用Python开发一个安全的文件传输系统,我现在正在处理协议。我的想法是有这样的东西:

[Command:1byte][DataLength:2bytes][Data]

我的问题是我不知道如何处理 Python 中的二进制/十六进制。

想象一下,我发送一个数据包,该数据包的命令(二进制)00000001(1字节)。dataLength = 200 字节,然后,由于我有 16 位来存储它,所以我有 0000000011001000 .所以标题是:000000010000000011001000.问题是:如何发送"原始",而不对 0 和 1 分别编码 1 字节?

您可以使用模块structarray

>>> from struct import pack, unpack
>>> from array import array
>>>
>>> # byte (unsigned char) + 2 bytes (unsigned short)
>>> header = pack('BH', 0, 15)
>>> # array of 15 null byte, you can also use string
>>> buffer = array('B', '' * 15).tostring()
>>>
>>> header
'x00x00x0fx00'
>>> buffer
'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
>>>
>>> header + buffer
'x00x00x0fx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
>>>

您应该考虑字节顺序。现在要解压缩该缓冲区,您可以执行以下操作:

>>> package = header + buffer
>>>
>>> package
'x00x00x0fx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
>>>
>>> # unpacking the header
>>> unpack('BH', package[:4])
(0, 15)
>>>
>>> # unpacking the payload
>>> array('B', package[4:])
array('B', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>>

最新更新