2017-02-23 13 views
0

У меня есть текст, который который кодируется с помощью base64 Например, у меня есть строказамена «=» по закодированной строки в Qt C++

string = "Hello" 

Это кодируется

Encoded string is :"SGVsbG9XQ1Q=" 

, а затем перед именем строка с "||" (2-Pipe Character)

проблема Теперь я хочу, чтобы заменить все = в этой закодированной строки с | (одна труба), только в конце строки не в середине любой строки

Как я заменю все = только в конце строки с | в 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); 
} 

Как применить мою заменяющую логику только в конце строки может кто-нибудь помочь мне с логикой?

У меня есть логика, но я не знаю, как ее применять?

Логика: она начнет проверку с конца строки, если есть «=», она заменит ее на «|» и он проверяет, существует ли еще один «=» до того, как последний равный ему снова будет заменен, а затем, если перед вторым «=», если есть другой символ, он перестанет заменять, как мы можем это сделать?

+0

вы ищете что-то вроде 'если (ba.endsWith ('=')) ба [ba.length() - 1] = '|'; '? – Mike

+0

@Mike да что-то вроде этого, но то, что я хочу, это когда он находит любого другого персонажа, то «=» он должен прекратить его заменять? Можно ли это сделать с помощью вышеописанного метода. Acoording me if (ba.endsWith ('=')) ba [ba.length() - 1] = '|'; заменит последнее «=», если у меня есть еще один «=» в конце строки? будет ли это работать? Я добавил свою логику выше? но не знаете, как это сделать? – cyley

ответ

1

Вы можете цикл через QByteArray от конца к началу (и разорвать петлю, когда вы найдете символ, отличный от '='), заменяя каждое вхождение '=' на '|', что-то вроде этого:

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

rbegin() не является членом массива Qbyte? мы можем использовать начало и конец вместо – cyley

+0

, он дает ошибку rbgin не является членом qbytearray – cyley

+0

@cyley, см. мой отредактированный ответ. ** ['rbegin'] (https://doc.qt.io/qt-5/qbytearray.html#rbegin) является членом' QByteArray' **. Однако он был введен в Qt 5.6 (похоже, вы используете версию старше этого). – Mike

0

я нашел точное решение:

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

Пожалуйста, не уменьшайте свой пост, откатываясь от наших улучшений. – FelixSFD

+0

Я только что написал свой ответ здесь – cyley

Смежные вопросы