Como faço para usar o MySQL ++ Conector C para armazenar dados binários?
-
21-08-2019 - |
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.
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