尝试将python列表转换为字符串非常沮丧,但它总是将单个字节转换为3个字节的对象。
我的代码从i2c连接获取字节并将它们存储在列表中。它应该将它们作为字符串对象通过网络发送,并且这样做。但是,在我的计算机的Java端,单字节(例如254)实际上是
00110010
00110101
00110100
而不是11111110
。
请告知?
在转换之前,我将数组打印到屏幕上:
print("outgoing")
print(outgoing)
这是打印屏幕结果:
outgoing
[254, 5, 0, 255, 255, 255, 255, 255, 255, 255, 254, 0, 202]
我尝试将列表转换为单个字符串,如下所示:
st = ''
try:
for e in outgoing:
st += str(e)
except:
e = sys.exc_info()[0]
print(e)
print(st)
我已经尝试了多种其他方法来进行转换。我写到网络的方法需要一个字符串对象,否则一切正常。
这是您的问题:您正在串联这些数字的字符串表示形式在一起,而不是字节本身。在Python 2中可能有更好的方法,但是:st = str(bytearray(outgoing))
应该可以工作... Heck,bytearray(outgoing)
可以单独工作。
因此,很明显,您正在所做的本质上是:
>>> outgoing = [254, 5, 0, 255, 255, 255, 255, 255, 255, 255, 254, 0, 202]
>>> st = ''.join(map(str, outgoing))
>>> st
'254502552552552552552552552540202'
但这不是您想要的,您想要的:
>>> str(bytearray(outgoing))
'\xfe\x05\x00\xff\xff\xff\xff\xff\xff\xff\xfe\x00\xca'
尽管,正如我所说,取决于您使用的是什么客户端,
>>> bytearray(outgoing)
bytearray(b'\xfe\x05\x00\xff\xff\xff\xff\xff\xff\xff\xfe\x00\xca')
可能就足够了。