如何将整数值赋给“0”;“关键数据”;在Berkeley DB中使用C

如何将整数值赋给“0”;“关键数据”;在Berkeley DB中使用C,c,berkeley-db,C,Berkeley Db,最近我在伯克利DB工作。我见过一些例子,其中人们在使用Berkeley DB创建数据库时使用“字符串”作为“key.data”的值。我想给它分配一个整数值。我该怎么做?我应该创建一个包含int成员的结构,还是有其他可能的方法 DBT key, data; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = "fruit"; key.size = sizeof("fruit"); 因此,

最近我在伯克利DB工作。我见过一些例子,其中人们在使用Berkeley DB创建数据库时使用“字符串”作为“key.data”的值。我想给它分配一个整数值。我该怎么做?我应该创建一个包含int成员的结构,还是有其他可能的方法

DBT key, data;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "fruit";
key.size = sizeof("fruit");
因此,我想分配一个整数值,而不是上面的“水果”。任何形式的帮助都将不胜感激

DBT结构提供一个void*字段,用于指向 数据,以及另一个标识数据长度的字段。他们可以 因此,它可以用来存储从简单的原始数据到 复杂的结构,只要你想存储的信息 驻留在单个连续内存块中

看,

要存储整数,可以将指向int的指针分配给key.data,例如:

int x = 42;
key.data = &x;
key.size = sizeof(x);

如果在不同字节顺序的系统上读取数据库文件,这不会导致问题吗?@bromfiets:我使用了上面显示的方法…但是当我试图打印它时…如果((ret=dbp->put(dbp,NULL,&key,&data,0))==0{printf(“db:%d:key-stored.\n”,(char*)&key.data);},它会返回不同的值@user537670和&key.data您正在获取指针key.data的地址。这是没有必要的。key.data已经是指针;将其强制转换为指向int的指针并遵从它,例如printf(“key:%d\n”,*(int*)key.data)@基思:是的。您必须注意应用程序中的字节顺序,例如,始终以特定的字节顺序进行读取和写入。