Python串口接收MCU的32位十六进制字节串,提取16位值
解决方法
你需要把串口接收的字节串转换成十六进制字符串,分割出两个16位的片段后转成整数,再进行位运算得到RGB值。以下是修改后的完整代码:
# 假设你已经导入了serial和PIL库 s = serialPort.readline() # 去除首尾的换行/空白字节,转成字符串 hex_str = s.strip().decode('utf-8') # 分割为两个4字符的十六进制片段 hex_f6f3 = hex_str[:4] hex_f6f2 = hex_str[4:] # 把十六进制字符串转为整数 F6F3 = int(hex_f6f3, 16) F6F2 = int(hex_f6f2, 16) # 计算RGB值并设置像素(注意第二个像素的坐标别和第一个重复) r1 = (F6F3 & 0xF800) >> 8 g1 = (F6F3 & 0x07E0) >> 3 b1 = (F6F3 & 0x001F) << 3 im.putpixel((x, y), (r1, g1, b1)) r2 = (F6F2 & 0xF800) >> 8 g2 = (F6F2 & 0x07E0) >> 3 b2 = (F6F2 & 0x001F) << 3 im.putpixel((x+1, y), (r2, g2, b2)) # 示例坐标,根据需求调整
关键步骤说明:
s.strip():清除字节串首尾的换行符、空格等无用内容,得到干净的b'F6F3F6F2'。.decode('utf-8'):把字节串转换成普通字符串'F6F3F6F2',方便分割操作。hex_str[:4]/hex_str[4:]:将8位十六进制字符串拆分为两个4位片段,对应两个16位数值。int(hex_str, 16):把十六进制字符串转为十进制整数,才能执行后续的位运算。
内容的提问来源于stack exchange,提问作者Michael Papageorge
相关产品推荐
相关产品推荐

