У меня есть блок памяти (непрозрачный), который я хочу сохранить в Blob в mySQL через их C++-адаптер. Адаптер ожидает IStream:инициализация C++ std :: istringstream из буфера памяти?
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Так что мой вопрос: как я могу создать зЬй :: IStream из этого блока памяти (классифицирован как символ *). Это не строка, поскольку она не завершена нулевым (но я знаю ее длину).
Я не мог найти способ сделать это, не копируя блок памяти, например, в std :: string. Я думаю, что это немного расточительно. Что-то вроде этого не работает:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
потому что std :: streambuf не имеет такого конструктора. Я увидел следующее предложение.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
Это правильный путь?
Возможный дубликат [Установка внутреннего буфера, используемого в стандартном потоке (pubsetbuf)] (http://stackoverflow.com/questions/1494182/setting-the-internal-buffer- used-by-a-standard-stream-pubsetbuf) –