我试图通过Raspberry Pi上的SPI端口读取刺痛。这是我测试端口的代码:
raw = 0
string = ""
SPI = spidev.SpiDev()
SPI.open(0,0)
while True:
raw = SPI.xfer2([0])
string += str(chr(raw))
print string
print raw
time.sleep(0.2)
结果是“Hell insert gibberish ”,因此在第四个字符后失败。我尝试发送“Hello World!”我发送的数据被格式化为列表中的字符,例如“Hello”看起来像[72,101,108,108,111]。如何将其转换为字符串?
答案很有用,因为我不知道如何转换数据。然而真正的问题是我正在与之接口的设备。答案对于找到真正的问题非常有用,非常感谢!我仍然是python的新手,所以这些事情都有点麻烦。
答案 0 :(得分:6)
>>> lst = [72, 101, 108, 108, 111]
>>> str(bytearray(lst))
'Hello'
#or
>>> ''.join(chr(x) for x in lst)
'Hello'
答案 1 :(得分:1)
如果我说得对,你想将[72,101,108,108,111]转换为'你好'
data = [72, 101, 108, 108, 111]
string = "".join([chr(n) for n in data])
print string
输出:
Hello
答案 2 :(得分:1)
还要考虑将转换后的字符附加到字符串,例如
str = ""
for c in [chr(n) for n in lst]:
str += c
<强>更新强>
在函数式编程风格中,如下所示,
from functools import reduce
reduce( (lambda x,y: x + chr(y)), [72, 101, 108, 108, 111], "")
其中reduce
将lambda函数应用于列表中的每个项目,从空字符串(最后一个参数)开始。 lambda函数可以这样定义,
def append(str,n): return str + chr(n)
因此对reduce
的调用变得更加冗长,
reduce( append, [72, 101, 108, 108, 111], "")
'Hello'