我正在使用蓝牙将一个16字节的字节数组发送到Python服务器。基本上,我想要实现的是按原样读取字节数组。如何在Python中做到这一点。
目前我所做的是读取字符串,因为那是我知道从套接字读取数据的唯一方法。以下是我用于Python套接字的代码:
data = client_sock.recv(1024)
请问这里的data
是字符串吗?有什么建议吗?
你已经在做你所要求的事情了。
data
是从套接字接收到的原始字节。
在Python 3.x中,它是一个 bytes
对象,这只是一个不可变的 bytearray
版本。在Python 2.x中,它是一个 str
对象,因为 str
和 bytes
是相同的类型。但无论哪种方式,该类型都只是一串字节。
如果你想将这些字节作为数字而不是字符访问:在Python 3.x中,仅索引或迭代 bytes
就可以实现,但在Python 2.x中,你必须对每个字符调用 ord
。这很容易。
或者,在两个版本中,你可以只调用 data = bytearray(data)
,它会创建数据的可变 bytearray
副本,当你索引或迭代它时,它会给你数字而不是字符。
例如,假设我们想在Python 2.7中将每个字节的十进制值写在单独的一行文本文件中(这是一个愚蠢的事情,但它演示了这些思想):
data = client_sock.recv(1024)
with open('textfile.txt', 'a') as f:
for ch in data:
f.write('{}\n'.format(ord(ch)))
struct
模块,具体来说是 struct.unpack()
。
ord
函数来获取4个字节而不是一个,并将这4个字节表示为浮点数? - user2426316ord
函数只能将每个值作为0-255的整数提取出来;你必须手动计算如何从这四个整数构造一个浮点数,而这不是你想做的。你可能正在寻找struct.unpack
函数。 - abarnert