Domanda

Sto prendendo alcuni dati binari fuori dal mio database MySQL. Ne viene fuori come un tipo mysqlpp :: sql_blob.

Si dà il caso che questo è un BLOB serializzato Google Protobuf. Ho bisogno di de-serializzare in modo che io possa accedere normalmente.

Questo dà un errore di compilazione, in quanto ParseFromString () non è destinato mysqlpp: tipi sql_blob:

protobuf.ParseFromString( record.data );

Tuttavia, se forzo il cast, si compila OK:

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

Questa funzione è sicura? Sono particolarmente preoccupato a causa di questo frammento dalla documentazione mysqlpp:

"Perché stringhe C ++ gestire dati binari solo bene, si potrebbe pensare è possibile utilizzare std :: string, invece di sql_blob, ma l'attuale configurazione delle String converte a std :: string tramite una stringa C. di conseguenza, i dati BLOB viene troncato al primo carattere null incorporato durante il popolamento dei SSQLS. non c'è modo per risolvere questo senza ridisegnare completamente né stringa o il meccanismo SSQLS. "

Grazie per il vostro aiuto!

È stato utile?

Soluzione

E non sembra che sarebbe stato un problema a giudicare da quella citazione (è fondamentalmente dicendo che se un carattere null si trova nel blob si fermerà la stringa lì, però stringhe ASCII non avranno i null casuali nel mezzo di loro). Tuttavia, questo potrebbe rappresentare un problema per l'internalizzazione (set di caratteri multibyte possono avere valori nulli nel mezzo).

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