我正在尝试通过串行连接(从另一个开源项目)发送文件。但是,我在发送大文件时陷入困境。文件长度转换不正确。
我通过声明使用int数组
encoded = []
然后找到文件长度。像
fileLength = 114872
当我对此进行编码时,得到了意外的输出。显然,对于这个数字,我们期望“ [0x00] [0x01] [0xC0] [0xB8]”
encoded.append(chr((fileLength >> 24) & 0xFF));
encoded.append(chr((fileLength >> 16) & 0xFF));
encoded.append(chr((fileLength >> 8) & 0xFF));
encoded.append(chr((fileLength >> 0) & 0xFF));
但是当我使用逐个字节打印出编码的字节
print("".join(str(v) for v in encoded).encode())
我得到:
\x00\x01\xc3\x80\xc2\xb8
以这种方式通过串行发送十六进制值不会以正确的字节发送。使用:
encoded.append(hex((fileLength >> 24) & 0xFF));
encoded.append(hex((fileLength >> 16) & 0xFF));
encoded.append(hex((fileLength >> 8) & 0xFF));
encoded.append(hex((fileLength >> 0) & 0xFF));
这给出了预期的结果:
0x00x10xc00xb8
但是在串行传输时无法识别此字符串。尽管我什至掩盖了除前8个字节之外的所有字节,但是为什么chr()函数返回16个字节?
谢谢您的帮助!
答案 0 :(得分:1)
为什么不使用int.to_bytes
In [11]: x = (114872).to_bytes(4, byteorder='big')
In [12]: x
Out[12]: b'\x00\x01\xc0\xb8'
In [13]: for i in x:
...: print(i)
...:
0
1
192
184