Hoje a dica do cpp::daily será bem simples, mas bem útil.
Dia desse surgiu uma dúvida de um dos alunos do Curso de C++ Moderno Avançado de como ele iria criar uma codificação com base64 com C++ .
Tudo isso pode ser feito de várias maneiras, mas a maneira mais simples e mais portável entre sistemas que encontrei e fiz algumas modificações para ficar mais simples possível a implementação foi essa:
Código pronto para ser implementado.
#include <iostream>
#include <vector>
#include <algorithm>
static std::string base64_encode(const std::string &in) {
std::string out;
int val = 0, valb = -6;
for (u_char c : in) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val>>valb)&0x3F]);
valb -= 6;
}
}
if (valb>-6) out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val<<8)>>(valb+8))&0x3F]);
while (out.size()%4) out.push_back('=');
return out;
}
static std::string base64_decode(const std::string &in) {
std::string out;
std::vector<int> T(256,-1);
for (int i=0; i<64; i++){
T["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[i]] = i;
}
int val=0, valb=-8;
for (u_char c : in) {
if (T[c] == -1) break;
val = (val << 6) + T[c];
valb += 6;
if (valb >= 0) {
out.push_back(char((val>>valb)&0xFF));
valb -= 8;
}
}
return out;
}
int main(){
std::string meu_conteudo = {"Isso será codificado!"};
std::string codificado = base64_encode( meu_conteudo );
std::cout << codificado << '\n';
std::string decodificado = base64_decode( codificado );
std::cout << decodificado << '\n';
return 0;
}
Se quiser você ainda pode usar argc
e argv
para gerar parâmetros via linha de comando para você codificar e/ou decodificar em tempo de execução.
Leia o código e analise para maior compreensão.
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: