2017-02-23 4 views
0

Ich habe einen Text, der kodiert wird base64 Zum Beispiel verwenden Ich habe einen Stringin qt c "=" von codierten String ersetzt ++

string = "Hello" 

Es kodiert wird

Encoded string is :"SGVsbG9XQ1Q=" 

und dann prepend die Zeichenfolge mit "||" (2-Pipe-Zeichen)

Jetzt Problem ist, ich all = in dieser codierten Zeichenfolge ersetzt werden soll mit | (einem Rohr) nur am Ende der Saiten nicht in der Mitte einer Zeichenfolge

Wie werde ich all = ersetzen nur am Ende des Strings mit | in qt C++?

Hier ist mein Code:

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

Wie meine ersetzen Logik am Ende der Zeichenkette nur anwenden kann mit der Logik jemand mir helfen?

Ich habe Logik, aber nicht wissen, wie man es anwendet?

Logic ist: es beginnt die Überprüfung vom Ende der Zeichenfolge, wenn es "=" gibt, wird es durch "|" und es wird prüfen, ob es ein anderes "=" gibt, bevor das letzte gleich wieder ersetzt wird und wenn dann vor dem zweiten "=" wenn es ein anderes Zeichen gibt, wird es aufhören zu ersetzen, wie können wir das tun?

+0

suchen Sie nach so etwas wie 'if (ba.endsWith ('=')) ba [ba.length() - 1] = '|';'? – Mike

+0

@Mike Ja, etwas wie das, aber was ich will ist, wenn es ein anderes Zeichen findet, dann "=" sollte es aufhören, es zu ersetzen? Kann dies mit der obigen Methode getan werden. Nach mir, wenn (ba.endsWith ('=')) ba [ba.length() - 1] = '|'; wird nur das letzte "=" ersetzen, wenn ich am Ende des Strings noch ein "=" habe? Ob das funktioniert? Ich habe meine Logik oben hinzugefügt? aber nicht bewusst, wie das geht? – cyley

Antwort

1

können Sie Schleife durch die QByteArray vom Ende bis zum Anfang (und die Schleife brechen, wenn Sie ein anderes Zeichen als '=' finden), jedes Vorkommen von '=' von einem '|', so etwas wie diese zu ersetzen:

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

rbegin() ist kein Mitglied von Qbyte Array? können wir beginnen und enden anstatt – cyley

+0

es gibt Fehler rbgin ist kein Mitglied von qbytearray – cyley

+0

@cyley, siehe meine bearbeitete Antwort. ** ['rbegin'] (https://doc.qt.io/qt-5/qbytearray.html#rbegin) ist ein Mitglied von' QByteArray' **. Es wurde jedoch in Qt 5.6 eingeführt (es sieht so aus, als ob Sie eine ältere Version verwenden). – Mike

0

ich habe die exakte Lösung gefunden:

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

Bitte verunstalten Sie Ihren Beitrag nicht, indem Sie unsere Verbesserungen zurücksetzen. – FelixSFD

+0

Ich habe gerade meine Antwort hier gepostet – cyley