使用Chr()发送十六进制值将添加未知字节

时间:2019-04-25 11:01:10

标签: python python-3.x

我正在尝试通过串行连接(从另一个开源项目)发送文件。但是,我在发送大文件时陷入困境。文件长度转换不正确。

我通过声明使用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个字节?

谢谢您的帮助!

1 个答案:

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