Pergunta

Eu tenho um bloco de dados binários definidos como:

O endereço void *, size_t binarySize;

que eu quero loja para um banco de dados MySQL usando ++ conector MySQL C.

O setBlob function () leva istream.

A pergunta:

Como posso converter de um endereço * vazio cru, size_t binarySize a qualquer um objeto istream ou istringstream? É possível fazer isso sem "copiar" os dados? ou seja, dizer istream o ponteiro e o tamanho de modo que pudesse apontar para ele.

Foi útil?

Solução

Você tem que subclasse streambuf por exemplo assim:

class DataBuf : public streambuf
{
public:
   DataBuf(char * d, size_t s) {
      setg(d, d, d + s);
   }
};

Depois, você pode instanciar um objeto istream que usa um DataBuf como tampão, que se usa o seu bloco de dados binário. Supondo que binarySize especifica o tamanho de seus dados binários em bytes (sizeof (char) deve ser um byte), você poderia fazer isso assim:

DataBuf buffer((char*)address, binarySize);
istream stream(&buffer);

Esse objeto istream agora você pode passar para setBlob ().

Saudações, Elrohir

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top