C++ 创建映射二进制数据的结构

C++ 创建映射二进制数据的结构,c++,struct,C++,Struct,假设我有这个二进制数据: '01 00 00 00' '02' '65 66 00' '05 00 00 00' 前4个字节是int序列中的另一个字节表示下一个ASCII字符串的长度,在该字符串之后还有另一个int 在010模板编辑器中,我可以执行如下结构,这将完全适合此二进制数据: struct Mapped{ int FirstInt; byte StringLength; char String[StringLength]; // compiler does not like this

假设我有这个二进制数据:

'01 00 00 00' '02' '65 66 00' '05 00 00 00'
前4个字节是
int
序列中的另一个字节表示下一个ASCII字符串的长度,在该字符串之后还有另一个
int
在010模板编辑器中,我可以执行如下结构,这将完全适合此二进制数据:

struct Mapped{
int FirstInt;
byte StringLength;
char String[StringLength]; // compiler does not like this
int SecondInt;
};
但是我不能在C++中这样做。在我的代码中,我只想创建一个
char*
Mapped*friendlyData=(Mapped*)sourceBuffer
我该怎么做?我尝试使用
std::string
而不是
byte-StringLength
char-string[StringLength]
的组合,但效果并不理想


我怎样才能做到这一点?

您的字符串长度是可变的吗?如果是,请说明您是如何读取它的,因为您读取可变长度二进制字符串的方式可能存在错误。是的,该字符串是可变长度的,但我无法在结构中将其定义为
char string[StringLength]它给了我错误。嗯,这很有趣。您可能需要使用字符向量并轮询StringLength向量的大小。在这个用例中可能吗?否则,如果无法将字符串嵌入结构中,您可能需要一个外部函数将字符串修剪为StringLength,并将其声明为字符指针。如果我将其声明为
char*
,则结构中只需要4个字节。因此,之后的每一个数据都会变得不正确。。。你明白我的意思吗?你不能有一个可变大小的结构域,句号。(除非它是结构中的最后一个,如果您的编译器支持将其作为扩展,并且在这种情况下,编译器仍然不知道大小,因此您将无法使用
+1
获取指向下一个结构的指针)