【发布时间】:2020-01-08 22:07:37
【问题描述】:
尝试将 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)
我尝试了多种其他方式来转换它。 我写入网络的方法需要一个字符串对象,否则一切正常。
【问题讨论】:
-
''.join(str(e) for e in 传出)
-
''.join([chr(b) for b in outgoing])?此外,查看struct模块以进行更复杂的二进制数据操作。看起来你不需要 Unicode 表示,所以你可以试试struct.pack。 -
这是 Python 2 还是 3?我觉得奇怪的是,您写入网络的方法会采用
str对象,在 Python 3 中,它是一个 unicode 代码点序列......它采用 字节序列,即 Python 2str或 Python 3bytes对象... -
我试过上面的两个 cmets 都没有运气。仍然要研究结构模块。 pi 上的 2.7 版。我相信我可以重写一堆其他方法来使用字节列表,但似乎应该有一种方法可以将字节连接在一起。
-
@cagney 好的,当您使用 Python 2 时,您真的应该指出,请注意,它不再受到官方支持,并且已通过它的官方生命周期结束。当涉及到字符串/字节时,这是 Python 2 和 3 之间非常重要的区别。
标签: python string python-2.7 byte python-2.x