Jak*_*les 23 c++ string binary qt
在std :: string和QByteArray之间无损转换的正确方法是什么...主要是为了处理二进制数据?
我正在使用:
QByteArray qba = QString::fromStdString(stdString).toAscii();
Run Code Online (Sandbox Code Playgroud)
和
QString(qba).toStdString();
Run Code Online (Sandbox Code Playgroud)
但我想检查一下这是否正确.
lee*_*mes 32
对于二进制数据的解决方案是有问题的,因为非ASCII字符将被转换为'?'通过QString::toAscii().对于内部表示,还存在UTF-16转换的不必要开销QString.正如您可能已经猜到的那样,QString只应在数据是文本而非二进制的情况下使用.
二者QByteArray并std::string具有用于原始数据(C-串+长度),也转换到C-串+长度构造函数.所以你可以用它们进行转换:
// std::string => QByteArray
QByteArray byteArray(stdString.c_str(), stdString.length());
// QByteArray => std::string
std::string stdString(byteArray.constData(), byteArray.length());
Run Code Online (Sandbox Code Playgroud)
它们都是二进制安全的,这意味着字符串可能包含'\0'字符而不会被截断.数据也没有被触及(没有UTF转换),因此这种转换是"无损"的.
确保使用长度为第二个参数的构造函数(对于both QByteArray和std::string),因为大多数其他构造函数将在第一次出现零之前截断数据.
Par*_*tes 12
从Qt 5.4开始,QByteArray内置支持std::string通过QByteArray::toStdString()和转换QByteArray::fromStdString().
这些实现几乎与leemes的答案相同.
inline std::string QByteArray::toStdString() const
{ return std::string(constData(), length()); }
inline QByteArray QByteArray::fromStdString(const std::string &s)
{ return QByteArray(s.data(), int(s.size())); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19491 次 |
| 最近记录: |