无法反序列化通过 TCP 接收的 flatbuf 消息
Unable to deserialize flatbuf messages received through TCP
我正在尝试序列化,然后反序列化FlatBuf对象。
我正在使用FlatBuffer 1.10.0。我想通过TCP将序列化的数据发送到另一个进程,但目前即使在相同的函数中我也无法反序列化它。
fbs 文件:
table StringPacket
{
type:int;
logLevel:int;
myAge:int;
stringdata:string;
}
root_type StringPacket;
C++中的代码:
...
uint8_t * packet_data;
int data_size;
using namespace flatbuffers;
FlatBufferBuilder fbb;
//serialize the string data
auto thisStringData = fbb.CreateString(m_stringdata);
//create the packet (I tried thisway too)
//auto packet = CreateStringPacket(fbb, 2, 3, 27, thisStringData);
StringPacketBuilder strbuilder(fbb);
strbuilder.add_logLevel(3);
strbuilder.add_myAge(4);
strbuilder.add_type(1);
strbuilder.add_stringdata(fbb.CreateString("somehing"));
auto thisPacket = strbuilder.Finish();
packet_data = fbb.GetBufferPointer();
data_size = fbb.GetSize();
auto get = GetStringPacket(packet_data);
std::cout << "Deserialized Log level: " << get->logLevel()<<std::endl;
std::cout << "Des Age: " << get->myAge() << std::endl;
...
我收到一个未处理的异常0xC0000005,访问冲突读取位置...
在行:
std::cout << "Deserialized Log level: " << get->logLevel()<<std::endl;
或者任何时候当我调用"get"对象的函数时。
我做错了什么?如何正确反序列化它?
请确保您使用断言进行测试(在"调试"模式下(,因为它已经回答了您的问题。特别:
- 您正在未完成的缓冲区(通常断言(上调用
GetBufferPointer
。您需要调用fbb.Finish(thisPacket)
或类似电话。 - 您在表生成器(通常断言(中调用
CreateString
,并在表生成器外部创建一个不使用的字符串。想必你本来是打算给strbuilder.add_stringdata(thisStringData)
打电话的。
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 重新定义预定义的 errno 错误消息 (E2BIG)
- Libmosquitto publish 不会将所有消息传递到 Azure IoT Hub
- 无法反序列化通过 TCP 接收的 flatbuf 消息