Python中如何将二进制字符串转为可用于SPI传输的二进制整数?
问题描述
我需要通过SPI发送二进制数据,因此定义了二进制字符串常量来代表LS7366R设备的命令与寄存器:
RD = '01' WR = '10' MDR0 = '001' MDR1 = '010'
例如要写入MDR0,我拼接字符串并格式化:
msg = WR + MDR0 msg = int(msg, 2) msg = [format(msg, '#010b')] print(msg) >> ['0b00010001']
现在的问题是msg为字符串类型,无法使用spidev包发送。执行bin(int(msg[0],2))得到的仍是字符串类型!如何将该二进制字符串转为可进行二进制运算的二进制整数,或是能直接被spidev使用的格式?
解决方案
1. 跳过字符串转换,直接使用整数
你完全不需要把整数转成带0b前缀的字符串,spidev支持直接发送整数列表。调整代码如下:
RD = '01' WR = '10' MDR0 = '001' MDR1 = '010' # 拼接命令字符串并转为整数 msg = WR + MDR0 cmd_int = int(msg, 2) # 得到整数17,对应二进制0b00010001 # 直接将整数列表传入spidev的发送方法 spi.xfer2([cmd_int])
int(msg, 2)已经把二进制字符串转换为真正的整数类型,该整数可直接参与二进制运算(如移位、与或非操作),同时能被spidev直接识别发送。
2. 从二进制字符串转换为整数
如果已经持有类似'0b00010001'的字符串,直接用int()函数即可完成转换:
binary_str = '0b00010001' cmd_int = int(binary_str, 2) # 得到整数17
转换后的整数支持所有二进制运算,也可直接用于spidev发送。
3. 转换为字节类型(可选)
若需要字节形式的数据,可将整数转为字节:
cmd_byte = cmd_int.to_bytes(1, byteorder='big') # 得到b'\x11' # 两种发送方式均可 spi.xfer2([ord(cmd_byte)]) # 或者 spi.xfer2(list(cmd_byte))
内容的提问来源于stack exchange,提问作者Mohamed Abduljawad
相关产品推荐
相关产品推荐

