gpt4 book ai didi

Python 3 - 从整数转换为 'bytes' 然后连接它们(用于串行传输)

转载 作者:太空狗 更新时间:2023-10-30 02:46:50 24 4
gpt4 key购买 nike

经过多次无果而终的搜索...我在理解 Python 3.2 中处理“字节”和十六进制内容的方式时遇到了一个非常具体的问题。我知道我误会了,但似乎找不到正确的路径。

我的最终目标是使用 python 串行模块来传输字节序列。有些字节是静态的,不会改变。其他人的值(value)应该在 0-255 之间变化。这些都需要一起smush在一起并立即传输。 (这些是可编程显示器的指令。代码包含设置 BG 颜色的固定指令,后跟一个字节用于 R、G 和 B 值。我试图在一个循环中循环颜色强度以进行测试,但后来我'我们会希望能够在显示器上实现实用功能)。

一个完整的静态传输,测试成功,可能如下:

ser.write(b'\xAA\x11\x05\x00\x00\x00\xc3')  #this works great

同样,我可以将它们混合在一起,即:

ser.write(b'\xAA\x11\x05' + b'\x00\x00\x00\xc3')  #also works great

现在,如果我想获取这三个零值字节之一,并用一个变量替换它,一切都会变成梨形。经过大量实验,我最终得到了一些据称将 For 循环的整数变量转换为与上述字节系列的串联兼容的类型:

SET_BG_COLOR = b'\xAA\x03\x03'
for r in range(0,255):
red = hex(r).encode('utf-8')
blue = hex(255-r).encode('utf-8')
ser.write(SET_BG_COLOR + blue + b'\x00' + red + b'\xC3') #BGR format

hex(integer).encode('utf-8') 是迄今为止唯一的方法,它不仅会引发无法连接到其他东西的错误,我正试图关闭串行连接.但是它不起作用,并且在查看结果时:

>>> x = b'\05'
>>> x
b'\x05'
>>> y = hex(5).encode('utf-8')
>>> y
b'0x5'
>>> type(x)
<class 'bytes'>
>>> type(y)
<class 'bytes'>
>>> x + y
b'\x050x5' #(this is what I get)
>>> z = b'\05'
>>> x + z
b'\x05\x05' #(this is what I want)
>>>

看起来,虽然它可以让我连接……它是字符串数据的二进制表示,还是类似的东西?那么让我连接但它不是真正的十六进制值吗?我是否错过了从 x=255 到 x= b'\FF' 的明显方法?或者我的整个方法只是错误的方法吗? -_- 感谢您的宝贵时间。

最佳答案

您在这里混淆了 Python 字节文字语法;您不需要生成文字语法,只需生成字节值; bytes() 类型也接受一个整数序列:

>>> bytes([255])
b'\xff'

应用于您的代码:

SET_BG_COLOR = b'\xAA\x03\x03'
for r in range(0,255):
red = bytes([r])
blue = bytes([255 - r])
ser.write(SET_BG_COLOR + blue + b'\x00' + red + b'\xC3') #BGR format

或者,更简单:

SET_BG_COLOR = [0xAA, 0x03, 0x03]
for r in range(0,255):
ser.write(bytes(SET_BG_COLOR + [r, 0x00, 255 - r, 0xC3])) #BGR format

使用文字十六进制整数表示法。

r = 10 的演示:

>>> SET_BG_COLOR = [0xAA, 0x03, 0x03]
>>> r = 10
>>> bytes(SET_BG_COLOR + [r, 0x00, 255 - r, 0xC3])
b'\xaa\x03\x03\n\x00\xf5\xc3'

hex()函数每字节输出4个字符;以文字 0x 开头,后跟整数的十六进制表示。编码为 UTF8 仍然是 4 个字节,b'\x30\x78\x30\x31' 用于整数值 10,例如,与 b'\x10 ' 为您想要的实际字节。

关于Python 3 - 从整数转换为 'bytes' 然后连接它们(用于串行传输),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18640175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com