我的问题是将数据从C#发送到C ++,反之亦然。
我有一个"服务器"它正在等待"客户端"的TCP连接。对于服务器我使用的是C#/ .NET,而客户端是用C ++编写的,没有额外的库或依赖项(我希望保持这种方式)。
在服务器端,"消息"正被创建一个序列化为字节数组。消息必须以数据的长度开始(不包括长度本身)。接下来必须有一个ID来识别它的目的(1个字节),它可能有一些有效载荷,形式为" int"," double"," string"等
这就是C#-Message序列化的方式:https://pastebin.com/RM18HCk2
示例消息可能如下所示:
[0] 0x11 byte < 4 bytes: Data length
[1] 0x00 byte
[2] 0x00 byte
[3] 0x00 byte
[4] 0x02 byte < 1 byte: Message ID (here: 2)
[5] 0x03 byte < 4 bytes: Title length (here: "Abc")
[6] 0x00 byte
[7] 0x00 byte
[8] 0x00 byte
[9] 0x03 byte < 1 byte: EO
[10] 0x41 byte < 3 bytes: Title (here: "Abc")
[11] 0x62 byte
[12] 0x63 byte
[13] 0x03 byte < 4 bytes: Message length (here: "Def")
[14] 0x00 byte
[15] 0x00 byte
[16] 0x00 byte
[17] 0x03 byte < EOT
[18] 0x44 byte < 3 bytes: Message ("Def")
[19] 0x65 byte
[20] 0x66 byte
现在我想在C ++端收回这些数据并解析它。我将收到的所有字节放入Buffer&#34; std :: deque MessageBuffer&#34;。这种情况一直持续到我有足够的时间来读取消息长度(int32的4个字节)。当我有预期的长度时,我会等到我已经足够接收完整的消息。
现在我需要解析&#34; MessageBuffer&#34;。我想根据第一个字节(即ID)调用不同的函数。根据消息,我知道数据的结构。在C#中,通过使用为我处理所有问题的BinaryReader解析它会非常简单。
问题:如何在没有boost或其他第三方库的情况下解析C ++中的MessageBuffer?
我想提取(在本例中)Title和Text,并将它们放在C ++端的std :: string中。但是,当然,相同的概念应该适用于所有类型的数据。
过去两天我在互联网上搜索过。出于某些原因,我可以找到的所有示例都是发送和接收std :: string,这根本不是我想要做的。 std :: istream会值得研究吗?
请注意,我不是在寻找解决方案,而是我会喜欢一些关于如何在C ++中完成的建议 - Land。