我正在为一个Delphi可执行文件开发一个C++的DLL项目。此可执行文件具有如下结构:
size
data[]
例如:
02 00 00 00 // Size
30 31 32 33 // data[0]
34 35 36 37 // Still data[0]
31 32 33 33 // data[1]
33 33 33 33 // Still data[1]
我试着做了这样的课程:
class LittleList
{
private:
int32_t size;
DataType* data;
}
它给了我这个:
02 00 00 00 // Size
xx xx xx xx // Pointer to data (and obviously, there are data[0] and data[1] at this address)
那不是我想要的。
我可以通过使用一个数组来实现我的目标:
class LittleList
{
private:
int32_t size;
DataType data[2];
}
但是,我被迫有一个固定的长度,这仍然不是我想要的。
我想了一个肮脏的解决办法:
class LittleList
{
private:
char* data;
// Storing size at data[0] ~ data[3]
// and the actual data from data[4] to data[...]
}
但要解析、读取和写入它真的很难。
这样的问题有没有干净的解决方案?
顺便说一下,这不是一个XY问题
您实际上是在解释数据,因此在这里使用reinterpret_cast
是有效的。不要太害怕未定义的行为--使用Delphi本身就是未定义的行为。
最简单的方法似乎是
private:
DataType& at(size_t i) {
assert(i<size);
return reinterpret_cast<DataType*>(&size+1)[i];
}
然后将其用作构建块。