字节列表中的字符串?

问题描述 投票:1回答:1

尝试将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 string python-2.7 byte python-2.x
1个回答
0
投票

这是您的问题:您正在串联这些数字的字符串表示形式在一起,而不是字节本身。在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')

可能就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.