我有这个
public static string Serialize(List<string> lst)
{
StringBuilder output = new StringBuilder("");
foreach (var str in lst)
{
string inter;
inter = str.Count().ToString().Count().ToString() + str.Count().ToString() + str;
output.Append(inter);
}
return output.ToString();
}
这段代码的作用是如果我有一个字符串troy
,它将返回
14troy
1表示标识符中有多少位数,4表示字符串中的字符数。
如果我使用stackoverflow
,它将返回
213stackoverflow
2是长度标识符中的位数,13是消息中的字符数。
我正在尝试将其转换为Qt代码,但我不明白.Count()正在返回。我知道它在System.Linq中。
我还需要知道如何在Qt C ++中实现这一目标。
编辑:在获得Tim Meyer的帮助后,我想出了怎么做..他是代码
QString ObjectSerializer::Serialize( QList<QString> lst ) {
QString output;
foreach( QString str, lst )
{
int strLen = str.length();
int identLeng = QString(QString::number(strLen)).length();
output.append( QString( "%1%2%3" )
.arg( identLeng )
.arg( strLen )
.arg( str ) );
}
return output;
}
如果你对解串器感兴趣(反之亦然),这里是代码:
QList<QString> ObjectSerializer::Deserialize( QString str ) {
if(str.isNull() || str.isEmpty())
return QList<QString>();
QList<QString> items;
int index = 0;
while(index < str.length()) {
int indexLen = QString(str[index]).toInt();
index++;
QString subStr = str.mid(index, indexLen);
int keyLen = subStr.toInt();
index += indexLen;
QString key = str.mid(index, keyLen);
index += keyLen;
items.append(key);
}
return items;
}
答案 0 :(得分:0)
这应该这样做:
QString YourClass::serialize( const QStringList& list )
{
QString output;
foreach( QString str, list )
{
output.append( QString( "%1%2%3" )
.arg( QString::number( str.length() ).length() )
.arg( str.length() )
.arg( str ) );
}
return output;
}
顺便说一句,我没有对此进行测试,但它应该是这样的。