将 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
:
Joins all the string list's strings into a single string with each element separated by the given separator (which can be an empty string).
QString pack(QStringList const& list)
{
return list.join(reserved_separator);
}
从 QString
到 QStringList
- QString::split
:
Splits the string into substrings wherever sep
occurs, and returns the list of those strings. If sep
does not match anywhere in the string, split()
returns a single-element list containing this string.
QStringList unpack(QString const& string)
{
return string.split(reserved_separator);
}
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";
之前的答案提到了 QString::split
和 QStringList::join
这是正确的方法,但是如果您选择的分隔符包含在任何字符串中,它将破坏您的转换。
您必须使用以下技术之一防止列表中的字符串包含您的分隔符:
- 如果任何字符串包含分隔符
,则在 QStringList::join 之前抛出错误
- 确保它们不能包含分隔符(例如存储字符串及其
QByteArray::toHex(myString.toLatin1())
表示,然后使用具有 0..9 和 a..f 范围之外的字符的分隔符. 然后用 QString::fromLatin1(QByteArray::fromHex(myHexString))
转换回来
- 使用任何分隔符,无论字符串是否包含它,但在 join() 之前为其实现转义逻辑,并在 split() 之后实现非转义逻辑,以便分隔符永远不会出现在任何字符串中连接时的字符串,但它的所有实例都将被恢复。
我正在寻找一种简单且万无一失的方法来将任意 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
:
Joins all the string list's strings into a single string with each element separated by the given separator (which can be an empty string).
QString pack(QStringList const& list)
{
return list.join(reserved_separator);
}
从 QString
到 QStringList
- QString::split
:
Splits the string into substrings wherever
sep
occurs, and returns the list of those strings. Ifsep
does not match anywhere in the string,split()
returns a single-element list containing this string.
QStringList unpack(QString const& string)
{
return string.split(reserved_separator);
}
QStringList strList;
strList << "Banana" << "Apple" << "Orange" ;
QString str = strList.join(""); // str = "BananaAppleOrange";
str = strList.join(","); // str = "Banana,Apple,Orange";
之前的答案提到了 QString::split
和 QStringList::join
这是正确的方法,但是如果您选择的分隔符包含在任何字符串中,它将破坏您的转换。
您必须使用以下技术之一防止列表中的字符串包含您的分隔符:
- 如果任何字符串包含分隔符 ,则在 QStringList::join 之前抛出错误
- 确保它们不能包含分隔符(例如存储字符串及其
QByteArray::toHex(myString.toLatin1())
表示,然后使用具有 0..9 和 a..f 范围之外的字符的分隔符. 然后用QString::fromLatin1(QByteArray::fromHex(myHexString))
转换回来 - 使用任何分隔符,无论字符串是否包含它,但在 join() 之前为其实现转义逻辑,并在 split() 之后实现非转义逻辑,以便分隔符永远不会出现在任何字符串中连接时的字符串,但它的所有实例都将被恢复。