C#字符串序列化器转换为Qt

时间:2011-12-08 00:35:06

标签: c# c++ string linq qt

我有这个

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

1 个答案:

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

顺便说一句,我没有对此进行测试,但它应该是这样的。