Сериализатор строк C #, преобразованный в Qt - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть

 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;
}

1 Ответ

0 голосов
/ 08 декабря 2011

Это должно сделать это:

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;
}

Я, кстати, этого не проверял, но так должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...