Frage

Ich habe einen Block binärer Daten wie folgt definiert:

void * Adresse, size_t binarySize;

, dass ich will auf eine MySQL-Datenbank MySQL C ++ Connector speichern.

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 „Kopieren“ die Daten? das heißt sagen, die Zeiger und die Größe iStream, so dass es ihn zeigen könnte.

War es hilfreich?

Lösung

Sie haben Unterklassen streambuf z.B. wie folgt aus:

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 (sizeof (char) sollte ein Byte sein) gibt, könnten Sie dies tun, etwa so:

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

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

Viele Grüße, Elrohir

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top