2009-07-01 19 views
0

Ich habe einen Block von binären Daten definiert als:Wie verwende ich MySQL C++ Connector zum Speichern binärer Daten?

void * Adresse, size_t binarySize;

, die ich in einer MySQL-Datenbank mit MySQL C++ Connector speichern möchte.

Die Funktion setBlob() nimmt istream.

Die Frage:

Wie kann ich aus einer rohen void * Adresse konvertieren, size_t binarySize entweder ein istream Objekt oder istringstream? Ist es möglich, dies zu tun, ohne die Daten zu "kopieren"? d. h. erzähle iStream den Zeiger und die Größe, damit er darauf zeigen kann.

Antwort

4

Sie müssen streambuf z. dies wie:

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

Dann können Sie ein istream Objekt instanziiert, die einen databuf als Puffer verwendet, die sich den Block von binären Daten verwendet. Angenommen, dass binarySize die Größe Ihrer Binärdaten in Bytes angibt (sizeof (char) sollte ein Byte sein), können Sie dies tun, wie so:

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

Das istream Objekt, das Sie jetzt setBlob passieren kann().

Grüße, Elrohir

+0

ehrfürchtige Antwort! Danke! – sivabudh

Verwandte Themen