提问人:Vinícius Almeida 提问时间:7/25/2023 更新时间:7/25/2023 访问量:94
如何使用 flatbuffers 存储 2D 数组?
How to store a 2D array using flatbuffers?
问:
这是我的架构,我正在使用 flatc/flatbuffers 版本 23.5.26
namespace FbSignal;
table BitArray {
bits: [int32];
}
table Message {
pulses: [BitArray];
}
table Signal {
label: string;
frequency_hz: int64;
data: Message;
}
我导入了 flatc 生成的库,并在 in Signal 表中用随机值填充了数据字段。我在文档中读到缓冲区是从后到前构建的,所以我向后填充了它。在此之后,我导出了二进制文件。
from FbSignal import BitArray, Message, Signal
import flatbuffers as fb
import numpy as np
# (4 x 16) array with random numbers
dummy_array = np.random.randint(0,100,(4,16))
builder = fb.Builder()
pulses_list = []
for i in reversed(range(4)):
BitArray.StartBitsVector(builder=builder,numElems=16)
for j in reversed(range(16)):
builder.PrependInt32(dummy_array[i][j])
pulses_list.append(builder.EndVector())
Message.StartPulsesVector(builder,numElems=4)
for pulse in reversed(pulses_list):
builder.PrependUOffsetTRelative(pulse)
data = builder.EndVector()
label = builder.CreateString('Dummy')
Signal.Start(builder=builder)
Signal.AddLabel(builder=builder,label=label)
Signal.AddFrequencyHz(builder=builder,frequencyHz=1000)
Signal.AddData(builder=builder,data=data)
signal = Signal.End(builder=builder)
builder.Finish(signal)
buf = builder.Output()
with open('dummy_signal.dat', 'wb') as bf:
bf.write(buf)
但是当我试着读回去时:
buf = open('dummy_signal.dat', 'rb').read()
buf = bytearray(buf)
signal = Signal.Signal.GetRootAs(buf,0)
first_pulse = signal.Data().Pulses(1).BitsAsNumpy()
我收到此错误:
TypeError: bad number -12209 for type uint32
如何解决此错误?
答: 暂无答案
评论