2

我正在从我制作的文件系统更改为 DBD。

而且我没有选择转换具有字符点成员的结构以将这些结构插入 DBD 文件

例如,如果有如下结构

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 文件的最有效方法。

坦率地说,我并不熟练。请尽可能具体地描述。

谢谢~

4

3 回答 3

2

如果要插入以下结构:

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 和 free(p)

读取,返回数据,读取字符串的大小,分配所需的内存并读取字符串本身

于 2011-11-14T01:31:00.290 回答
0

我认为您可以尝试为您的结构设置默认值

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;
}

希望这会有所帮助

于 2011-11-14T01:20:07.580 回答
0

您的数据需要可序列化。在您的问题中,您已经在一个案例中做到了这一点。对许多类型的记录以一般方式执行此操作对于精通 C++ 和 BDB 的人来说是一项任务(我以前做过)。你似乎表明你不熟练。所以如果你想自己做,你将不得不转换每个听起来单调的结构(你说有太多),但至少它需要更少的技巧。

您正在寻找的解决方案太复杂而无法生成并且太长而无法在此处发布。

于 2012-01-03T21:31:53.273 回答