Как присвоить целочисленное значение key.data в Berkeley DB с помощью C

В последнее время я работаю с Berkeley DB. Я видел примеры, когда люди использовали «строку» в качестве значения для «key.data» при создании базы данных с помощью Berkeley DB. Я хочу присвоить ему целочисленное значение. Как я могу это сделать? Должен ли я создать структуру с членом int или есть ли другой способ?

DBT key, data;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "fruit";
key.size = sizeof("fruit");

Поэтому вместо «фруктов» выше я хочу присвоить целочисленное значение. Любая помощь будет оценена по достоинству.


person user537670    schedule 25.08.2011    source источник


Ответы (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);
person ubiyubix    schedule 25.08.2011
comment
Не вызовет ли это проблем, если вы прочитаете файл базы данных в системе с другим порядком байтов? - person Keith Thompson; 26.08.2011
comment
@bromfiets: я использовал метод, который вы показали выше .... но когда я пытаюсь его распечатать .... он возвращает мне другое значение if ((ret = dbp-›put(dbp, NULL, &key, &data, 0)) == 0) { printf(db: %d: ключ сохранен.\n, (char*)&key.data);} - person user537670; 26.08.2011
comment
@user537670 user537670 С &key.data вы берете адрес указателя key.data. В этом нет необходимости. key.data уже является указателем; приведите его к указателю на int и уважайте его, например, printf(key: %d\n, *(int *) key.data); - person ubiyubix; 26.08.2011
comment
@ Кит Да, это так. Вам нужно будет позаботиться о порядке байтов в приложении, например. всегда читать и писать в определенном порядке байтов. - person ubiyubix; 26.08.2011