我正在将一个文件系统更改为DBD。
并且我没有选择转换具有字符点成员的结构将这些结构插入DBD文件
examble,如果有如下结构
typedef struct
{
int IndexKey;
int groupID;
char* name;
char* pNum;
char* pAddr;
char* pMemo;
} TsomeRec;
我做了一个结构转换如下
typedef struct
{
int IndexKey;
int groupID;
char name[MAX_NAME_LEN];
char pNum[MAX_NUM_LEN];
char pAddr[MAX_ADDR_LEN];
char pMemo[MAX_MEMO_LEN];
} TsomeRec2;
但是,要转换的结构太多了。
因此,考虑到性能,我正在寻找将这些结构插入DBD文件的最有效方法。
坦率地说,我并不精通。请尽可能详细地描述。谢谢~
如果您想插入以下结构:
struct S
{
char* string1;
char* string2;
}
char* p=malloc( (sizeof(size_t) + strlen(s.string1)+ sizeof(size_t) + strlen(s.string2));
size_t i=0;
size_t len1=strlen(s.string1);
memcpy(&len1,&p[i],sizeof(size_t)); i+=sizeof(size_t);
memcpy(&s.string1,&p[i],strlen(s.string1)); i+=strlen(s.string1);
size_t len2=strlen(s.string2);
memcpy(&len2,&p[i],sizeof(size_t)); i+=sizeof(size_t);
memcpy(&s.string2,&p[i],strlen(s.string1)); i+=strlen(s.string2);
然后,使用'p'将键/数据存储到BDB中并释放(p)
读取,返回数据,读取字符串的大小,malloc所需的内存并读取字符串本身
我想你可以尝试为你的结构设置默认值
struct a
{
a() : i(X),j(Y){}
int i;
int j;
};
或在结构
中进行枚举struct X {
enum Colour { red, blue } colour;
};
int main(void)
{
struct X x;
x.colour = blue;
return 0;
}
希望这对你有所帮助
您的数据需要序列化。在你的问题中,你已经这样做了一次。对于许多类型的记录,要以通用的方式做到这一点,对于精通c++和BDB的人来说是一项任务(我以前做过)。你似乎表明你并不精通。因此,如果你想自己做,你将不得不转换每个结构听起来单调(你说有太多了),但至少它需要较少的技能。
你正在寻找的解决方案太复杂,无法生产,太长,不能张贴在这里。