我抓住一些二进制数据从我的MySQL数据库。它出来作为mysqlpp :: sql_blob类型。

它只是恰巧,这BLOB是一个序列化的谷歌的Protobuf。我需要反序列化它,这样我可以正常访问它。

这给出了一个编译错误,因为ParseFromString()不旨在用于mysqlpp:sql_blob类型:

protobuf.ParseFromString( record.data );

然而,如果我强制投,它编译确定:

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

这安全吗?我因为来自mysqlpp文档此代码段的特别担心:

“因为C ++字符串只是处理二进制数据罚款,你可能会认为你可以使用的std :: string代替sql_blob,但字符串的当前设计转换通过C字符串的std :: string。其结果是,BLOB数据在人群中第一个嵌入的空字符被截断的SSQLS的。有没有办法来解决,如果没有完全重新设计或者字符串或SSQLS机构。“

感谢您的帮助!

有帮助吗?

解决方案

它看起来并不像它会通过引用判断问题(它基本上是说,如果一个空字符的BLOB发现它会停止串在那里,但是ASCII字符串不会有随机零点在中间他们的)。然而,这可能出现一个问题,内化(多字节字符集可以具有在中间的空值)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top