That's my schema and I'm using flatc/flatbuffers version 23.5.26
namespace FbSignal;
table BitArray {
bits: [int32];
}
table Message {
pulses: [BitArray];
}
table Signal {
label: string;
frequency_hz: int64;
data: Message;
}
I imported the libraries generated by flatc and filled data field in the in Signal table with random values. I read in the documentation that buffers are built back to front so i filled it backwards. After this, I exported the binary file.
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)
But when I try to read it back:
buf = open('dummy_signal.dat', 'rb').read()
buf = bytearray(buf)
signal = Signal.Signal.GetRootAs(buf,0)
first_pulse = signal.Data().Pulses(1).BitsAsNumpy()
I get this error:
TypeError: bad number -12209 for type uint32
How to solve this error?