经过多少徒劳无功的搜索...我有一个非常具体的问题,理解在Python 3.2中处理'字节'和十六进制内容的方式.我知道我是误会,但似乎无法找到正确的道路.
我的最终目标是使用python串行模块传输一个字节序列.有些字节是静态的,不会改变.其他人的价值从0到255不等.这些都需要一起按下并一次传输.(这些是可编程显示器的指令.代码包含设置BG颜色的固定指令,后面是R,G和B值的每个字节.我试图在循环中循环颜色强度进行测试,但后来我'我希望能够在显示器上实现这一功能).
经过测试成功的完整静态传输可能如下:
ser.write(b'\xAA\x11\x05\x00\x00\x00\xc3') #this works great
Run Code Online (Sandbox Code Playgroud)
同样,我可以将它们一起刷,即:
ser.write(b'\xAA\x11\x05' + b'\x00\x00\x00\xc3') #also works great
Run Code Online (Sandbox Code Playgroud)
现在,如果我想取这三个零值字节中的一个,并用变量替换它,那么它们都是梨形的.在经过多次实验后,我最终得到了一些东西,据称将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
Run Code Online (Sandbox Code Playgroud)
十六进制(整数).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 + …Run Code Online (Sandbox Code Playgroud)