将 QStringList 打包到 QString 并解压缩回来
Pack QStringList to QString and unpack it back
我正在寻找一种简单万无一失的方法来将任意QStringList
转换为单个QString
并返回。
QStringList fruits;
fruits << "Banana", "Apple", "Orange";
QString packedFruits = pack(fruits);
QStringList unpackFruits = unpack(packedFruits);
// Should be true
// fruits == unpackFruits;
对于此类问题,最简单的解决方案是什么?
从 QStringList
到 QString
- QStringList::join
:
将所有字符串列表的字符串联接到单个字符串中,每个元素由给定的分隔符(可以是空字符串)分隔。
QString pack(QStringList const& list)
{
return list.join(reserved_separator);
}
从QString
到QStringList
- QString::split
:
将字符串拆分为子字符串,无论出现
sep
,并返回这些字符串的列表。如果sep
在字符串中的任何位置都不匹配,则split()
返回包含此字符串的单元素列表。
QStringList unpack(QString const& string)
{
return string.split(reserved_separator);
}
前面的答案提到QString::split
和QStringList::join
这是正确的方法,但是如果您选择的分隔符包含在任何字符串中,它将破坏您的转换。
必须使用以下方法之一防止列表中的字符串包含分隔符:
- 如果任何字符串包含分隔符,则在 QStringList::join 之前抛出错误
- 确保它们不能包含分隔符(例如,存储字符串及其
QByteArray::toHex(myString.toLatin1())
表示形式,然后使用字符超出范围 0..9 和 a. 的分隔符。f.然后用QString::fromLatin1(QByteArray::fromHex(myHexString))
转换回来 - 无论字符串是否包含分隔符,都可以使用任何分隔符,但在 join() 之前为其实现转义逻辑,在 split() 之后实现取消转义逻辑,以便在连接时分隔符永远不会出现在任何字符串中,但将恢复它的所有实例。
使用 QStringList::join() :
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";
相关文章:
- 使用C++进行运行长度解压缩
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 浏览压缩文件与游览解压缩它们
- 如何在C++向量中解压缩多个值
- 解压缩 C 样式数组以及C++中的参数包
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- 如何使用 Poco::ZIP 压缩/解压缩 zip 文件
- 在编译时解压缩数组扩展数据块 (C++11/14)
- 使用 RtMidi 解压缩 Midi 时间码
- 将参数包解压缩到 std::initializer_list?
- 解压缩可变模板参数
- 解压缩附加的压缩字符串
- 使用 AVX2 将 8 位从 32 位值 (__m256i) 解压缩到__m256的最快方法
- C++宏解压缩并加入
- 解压缩串联的 zlib 流而不读取下一个字节
- 解压缩位大小不能被 8 整除的值流
- 将 QStringList 打包到 QString 并解压缩回来
- 如何将无符号的 int 放入 char 数组并将其解压缩回来