如何从Python中的套接字读取字节数组

use*_*316 3 python sockets string byte

我正在使用蓝牙将 16 字节字节数组发送到 Python 服务器。基本上我想要实现的是按原样读取字节数组。我怎样才能在Python中做到这一点。

我现在正在做的是读取字符串,因为这是我知道如何从套接字读取数据的唯一方法。这是我在 python 中的套接字的代码

data = client_sock.recv(1024)
Run Code Online (Sandbox Code Playgroud)

data绳子在哪里。有任何想法吗?

aba*_*ert 5

你已经完全按照你的要求做了。

data是从套接字接收的字节,按原样。

在 Python 3.x 中,它是一个bytes对象,它只是bytearray. 在 Python 2.x 中,它是一个str对象,因为strbytes是相同的类型。但无论哪种方式,该类型都只是一个字节字符串。

如果您想以数字而不是字符的形式访问这些字节:在 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)))
Run Code Online (Sandbox Code Playgroud)