У меня есть
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 ++.
Редактировать: Получив помощь Тима Мейера, я понял, как это сделать .. Он код
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;
}