繁体   English   中英

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

[英]How can I read a byte array from a socket in Python

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

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

data = client_sock.recv(1024)

其中data是字符串。 有任何想法吗?

您已经完全按照自己的要求进行了。

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)))

您想要的是struct模块。 特别是struct.unpack()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM