经过多次毫无结果的搜索...我在理解 Python 3.2 中处理“字节”和十六进制内容的方式时遇到了一个非常具体的问题。我知道我误解了,但似乎无法找到正确的路径。
我的最终目标是使用python串行模块来传输字节序列。有些字节是静态的,不会改变。其他的值应该在 0-255 之间变化。这些都需要集中在一起并立即传输。 (这些是可编程显示器的指令。代码包含设置 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' 的极其明显的方法?还是我的整个方法都是错误的? -_- 谢谢你的时间。