Frage

Ich packte einige binäre Daten aus meiner MySQL-Datenbank. Es kommt heraus, als mysqlpp :: sql_blob Typ.

Es passiert einfach so, dass dieses BLOB ist eine serialisiert Google Protobuf. Ich muss Deserialisieren es so, dass ich es normalerweise zugreifen können.

Das gibt einen Compiler-Fehler, da ParseFromString () nicht für mysqlpp bestimmt: sql_blob Typen:

protobuf.ParseFromString( record.data );

Wenn ich jedoch die Besetzung zwingen, es kompiliert OK:

protobuf.ParseFromString( (std::string) record.data );

Ist das sicher? Ich bin vor allem wegen dieses Ausschnitts aus der Dokumentation mysqlpp besorgt:

"Weil C ++ Strings verarbeiten binäre Daten nur gut, könnte man denken Sie std :: string statt sql_blob, aber das aktuelle Design von String konvertiert zu std :: string über einen C-String. Als Ergebnis der BLOB-Daten abgeschnitten an den ersten eingebetteten null-Zeichen während Bevölkerung nutzen können der SSQLS. Es gibt zu fix keine Möglichkeit, dass ohne vollständig entweder String oder den SSQLS Mechanismus neu zu gestalten. "

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Es sieht nicht so aus, wie es ein Problem mit diesem Zitat zu urteilen wäre (es ist im Grunde sagt, wenn ein Null-Zeichen in dem Blob gefunden wird, wird die Zeichenfolge dort anhalten, jedoch ASCII-Strings haben nicht zufällig Nullen in der Mitte von ihnen). Allerdings könnte dies ein Problem für die Internalisierung präsentieren (multibyte charsets nulls in der Mitte haben kann).

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