Domanda

Ho un blocco di dati binari definiti come:

void * indirizzo, size_t binarySize;

che voglio memorizzare in un database MySQL utilizzando MySQL ++ connettore C.

La funzione di setBlob () batte istream.

La domanda:

Come posso convertire da un vuoto indirizzo grezzo *, size_t binarySize sia ad un oggetto istream o istringstream? E 'possibile farlo senza "copiare" i dati? cioè dire iStream il puntatore e la dimensione in modo che potesse puntare ad esso.

È stato utile?

Soluzione

Si deve sottoclasse streambuf esempio in questo modo:

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

Quindi è possibile creare un'istanza di un oggetto istream che utilizza un DATABUF come buffer, che a sua volta usa il tuo blocco di dati binari. Supponendo che binarySize specifica le dimensioni dei dati binari in byte (sizeof (char) dovrebbe essere un byte), si potrebbe fare questo in questo modo:

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

Questo oggetto istream ora è possibile passare a setBlob ().

Saluti, Elrohir

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top