在qt c++中替换编码字符串的“=”

replacing "=" of encoded string in qt c++

我有一个使用 base64 编码的文本 例如我有一个字符串

string = "Hello"

编码为

Encoded string is :"SGVsbG9XQ1Q="

然后在字符串前加上“||” (2 管道字符)

现在的问题是我想用 |(一个管道)替换该编码字符串中的所有 =,仅在字符串的末尾而不是在任何字符串的中间

如何在 qt c++ 中将字符串末尾的所有 = 替换为 |

这是我的代码:

#include <QCoreApplication>
#include <QString>
#include <QDebug>
#include <QByteArray>

QString base64_encode(QString string);
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString srcString = "HelloWCT";
    QString encodedString = base64_encode(srcString);

    qDebug() << "Encoded string is" << encodedString;
    return a.exec();
 }

 QString base64_encode(QString string){
 QByteArray ba;
 ba = ba.append(string);
 ba = ba.toBase64();
 ba = ba.prepend("||");
 return(ba);
}

如何仅在字符串末尾应用我的替换逻辑?有人可以帮我解决逻辑问题吗?

我有逻辑但不知道如何应用它?

逻辑是:它会从字符串的末尾开始检查,如果有“=”,它会用“|”替换它它将检查在最后一个等于之前是否存在另一个“=”,它将再次替换,然后如果在第二个“=”之前存在另一个字符,它将停止替换我们如何才能做到这一点?

您可以从头到尾循环遍历 QByteArray(并在找到 '=' 以外的字符时中断循环),将每个出现的 '=' 替换为一个 '|',像这样:

QByteArray ba("SGVsbG9XQ1Q=");
for(int i=ba.length()-1; i>=0 && ba[i]=='='; i--)
    ba[i] = '|';

我找到了确切的解决方案:

for(int i=ba.length()-1; i>=0 ;i--)
         if(ba.at(i) == '=')
         {
            //replace with "|"
            ba.replace(i,1,QByteArray("|"));
         }
        else
           break;