gpt4 book ai didi

c++ - 从 byte[] 到 struct 的类型转换

转载 作者:行者123 更新时间:2023-11-30 01:28:01 26 4
gpt4 key购买 nike

我目前正在开发一个小型 C++ 项目,我在其中使用其他人构建的客户端-服务器模型。数据通过网络发送,在我看来它的顺序是错误的。但是,这不是我可以改变的。

示例数据流(简化):

0x20 0x00 (C++: short with value 32)
0x10 0x35 (C++: short with value 13584)
0x61 0x62 0x63 0x00 (char*: abc)
0x01 (bool: true)
0x00 (bool: false)

我可以将这个特定的流表示为:

struct test {
short sh1;
short sh2;
char abc[4];
bool bool1;
bool bool2;
}

我可以使用 test *t = (test*)stream; 对其进行类型转换,但是,char* 的长度是可变的。但是,它始终以空值终止。

我知道没有办法将流实际转换为结构,但我想知道是否有比 struct test() { test(char* data) { ... }} 更好的方法(通过构造函数转换)

最佳答案

这叫做 Marshallingserialization .

您必须做的是一次读取一个字节的流(或将所有内容放入缓冲区并从中读取),一旦您有足够的数据供结构中的成员使用,就将其填充。

当涉及到字符串时,您只需读取直到遇到终止零,然后分配内存并将字符串复制到该缓冲区并将其分配给结构中的指针。

如果您已经在缓冲区中有消息,那么以这种方式读取字符串是最简单和最有效的,因为这样您就不需要为字符串临时缓冲区。

不过请记住,使用此方案时,您必须在完成结构后手动释放包含字符串的内存。

关于c++ - 从 byte[] 到 struct 的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com