如何使用 flatbuffers 存储 2D 数组?

How to store a 2D array using flatbuffers?

提问人:Vinícius Almeida 提问时间:7/25/2023 更新时间:7/25/2023 访问量:94

问:

这是我的架构,我正在使用 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

如何解决此错误?

蟒蛇 flatbuffers)

评论


答: 暂无答案