У меня есть блок двоичных данных, определенный как:
void * address, size_t binarySize;
который я хочу сохранить в базе данных MySQL, используя MySQL С++ Connector.
Функция setBlob() принимает istream.
Вопрос:
Как я могу преобразовать из необработанного void * address, size_t binarySize в объект istream или istringstream? Можно ли это сделать без "копирования" данных? то есть указать istream указатель и размер, чтобы он мог указать на него.
Вы должны подклассифицировать streambuf, например. например:
class DataBuf : public streambuf
{
public:
DataBuf(char * d, size_t s) {
setg(d, d, d + s);
}
};
Затем вы можете создать экземпляр объекта istream, который использует DataBuf в качестве буфера, который сам использует ваш блок двоичных данных. Предположим, что binarySize задает размер ваших двоичных данных в байтах (sizeof (char) должен быть одним байтом), вы можете сделать это следующим образом:
DataBuf buffer((char*)address, binarySize);
istream stream(&buffer);
Этот объект istream теперь можно перейти к setBlob().
С уважением, Элрохир