Однако преобразовать память в байтовый массив? - PullRequest
2 голосов
/ 17 августа 2010

Теперь у меня есть база данных, один тип поля которой является массивом байтов.

Теперь у меня есть кусок памяти или объект. Как преобразовать этот фрагмент памяти или даже объект в байтовый массив, чтобы я мог сохранить байтовый массив в базе данных.

Предположим, объект

Foo foo

Память

buf         (actually, don't know how to declare it yet)

Поле базы данных:

byte data[256]

В поле можно вставить только шестнадцатеричное значение, подобное x'1'.

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

Есть два метода.

Один прост, но имеет серьезные ограничения. Вы можете написать образ памяти объекта Foo. Недостатком является то, что если вы когда-нибудь измените компилятор или структуру Foo, тогда все ваши данные могут больше не загружаться (поскольку изображение больше не соответствует объекту). Для этого просто используйте

&Foo

как байтовый массив.

Другой метод называется ' serialization '. Может использоваться, если объект меняется но добавляет много места для кодирования информации. Если у вас есть только 256 байтов, то вы нужно быть осторожным, сериализация не создает слишком большую строку для сохранения.

1 голос
/ 18 августа 2010

Boost имеет библиотеку сериализации , на которую вы, возможно, захотите взглянуть, хотя вам нужно будет внимательно следить за размером созданных объектов.Если вы делаете это только с небольшим набором классов, вы можете сами написать функции сортировки и сортировки.

Из документации:

«Здесь мы используем термин»сериализация «означает обратимую деконструкцию произвольного набора структур данных C ++ в последовательность байтов».

...