【问题标题】:How to assign an integer value to "key.data" in Berkeley DB using C如何使用 C 将整数值分配给 Berkeley DB 中的“key.data”
【发布时间】:2011-08-25 17:59:09
【问题描述】:

最近我正在与 Berkeley 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");

所以我想分配一个整数值,而不是上面的“水果”。任何形式的帮助将不胜感激。

【问题讨论】:

    标签: c berkeley-db


    【解决方案1】:

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

    见,http://download.oracle.com/docs/cd/E17076_02/html/gsg/C/DBEntry.html

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

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

    【讨论】:

    • 如果在不同字节顺序的系统上读取数据库文件,会不会出问题?
    • @bromfiets:我使用了上面显示的方法....但是当我尝试打印它时....它返回一个不同的值 if ((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);
    • @Keith 是的。您必须注意应用程序中的字节顺序,例如总是以特定的字节顺序读写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多