google / flatbuffers

FlatBuffers: Memory Efficient Serialization Library
https://flatbuffers.dev/
Apache License 2.0
22.52k stars 3.19k forks source link

Unable to get correct set data #8331

Open Chenmo128 opened 2 weeks ago

Chenmo128 commented 2 weeks ago

I'm having an issue where the field values I get after deserialisation don't match the values I've set. environments :[C++, gcc 9.3, aarch64, FlatBuffers:23.5.26]

Here is my code, you can see that I set: obstacles_builder.add_confScale(63246); but these two lines of code prints 0 instead:

 auto test = message->confScale(); //test
    std::cout << test << std::endl; 

I think it's the code I bolded that's the problem, because if I remove this code it prints correctly, but I don't understand why

my code:

void GetObstacles(flatbuffers::FlatBufferBuilder& builder, int obstacle_num) {
    HeaderBuilder header_builder(builder);
    header_builder.add_time_stamp(123456789);
    header_builder.add_frame_id(1);
    ObstaclesBuilder obstacles_builder(builder);
    obstacles_builder.add_header(header_builder.Finish());
    obstacles_builder.add_confScale(63246);

    **std::vector<flatbuffers::Offset<Obstacle>> obstacles_vector;
    for(int i = 0; i < obstacle_num; ++i) {
        ObstacleBuilder obstacle_builder(builder);
        obstacle_builder.add_id(i);
        ......
        obstacles_vector.push_back(obstacle_builder.Finish());
    }

    auto obstacles_offset = builder.CreateVector(obstacles_vector);
    obstacles_builder.add_obstacle(obstacles_offset);**

    auto obstacles = obstacles_builder.Finish();
    builder.Finish(obstacles);

    size_t size = builder.GetSize();
    std::vector<uint8_t> serialized_data(size);
    std::memcpy(serialized_data.data(), builder.GetBufferPointer(), size);

    const Obstacles* message = 
            flatbuffers::GetRoot<Obstacles>(serialized_data.data());
    auto test = message->confScale(); //test
    std::cout << test << std::endl;
}

my .fbs file:

table Obstacles {
  header : Header;
  confScale : float;
  obstacle : [Obstacle];
   ....
}

table Obstacle {
  id : int;
  ....
}