gpt4 book ai didi

Python从Buffer中读取数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:18 39 4
gpt4 key购买 nike

我是菜鸟!

我使用以下方法从传感器读取数据:

data = ""
dev = os.open("/dev/rtlightsensor0", os.0_RDWR)
data = os.read(dev,16)

print(data)

结果:b'1 53 -5 1\n'

我以为那是一个字符串,但看起来像一个缓冲区?谁能给我一个提示,如何获得 4 个数字?

我试过了

value1 = data[1]

但结果是不同的数字..

最佳答案

看完别人的回答,我必须在这里补充一下。

我刚刚发现你想读取文本文件而不是二进制文件,所以上面的代码不适用于你的情况,但我有更好的读取方式而不是使用二进制读取。

file = open("/dev/rtlightsensor0", "r")
line = file.readline()
data = [int(each) for each in line.split())

这里我将文件读取为字符串而不是字节,因为您的文件是文本文件。试试看,你会发现它真的很简洁。

下面是我的原答案,如果有一天你需要读取二进制数据,它会起作用。

我也是菜鸟!

你没有足够清楚地描述你的问题,所以我只能猜测你的文件中有 4 个 32 位(4 字节)int,你想将其读入你的程序。

os.read是一个二进制文件读取函数,所以你得到的变量databytes而不是list of number。 Python 无法推断您的数字的长度,因为它可以是 4 个 32 位数字或 1 128 位数字或其他内容,因此您需要通过某种方式明确说明。

还有一个小问题,你的数据是big endian还是little endian?如果您的数据不是来自网络通信,我想它是小端。如果您发现数据有误(例如,大到令人难以置信),您可以尝试将“大”转换为“小”。

所以你可以这样完成你的代码:

dev = os.open("/dev/rtlightsensor0", os.0_RDWR)
raw_data = os.read(dev,16)
data = []
data.append(int.from_bytes(raw_data[0:4], 'little'))
data.append(int.from_bytes(raw_data[4:8], 'little'))
data.append(int.from_bytes(raw_data[8:12], 'little'))
data.append(int.from_bytes(raw_data[12:16], 'little'))
print(data)

但是不要那样做,因为这真的很傻。如果你能理解上面的代码,那么你可以这样写更好:

dev = os.open("/dev/rtlightsensor0", os.0_RDWR)
raw_data = os.read(dev, 16)
data = [int.from_bytes(raw_data[i * 4: (i + 1) * 4], 'little') for i in range(4)]
print(data)

顺便说一下,像这样读取二进制数据是不明智的。一般来说,推荐包numpy

关于Python从Buffer中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026110/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com