Accueil > > > FAST BASE64 / UUENCODING ENCODAGE/DECODAGE
FAST BASE64 / UUENCODING ENCODAGE/DECODAGE
Information sur la source
Description
Classes C++ permettant de coder/décoder rapidement et simplement une string en/depuis Base64/Uuencoding.
Source
/////////////////////BASE64.HPP/////////////////////
#ifndef __ENCODING_BASE64_HPP__
#define __ENCODING_BASE64_HPP__
#include <iostream>
/// Base64 alphabet
static const std::string b64table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
class Base64
{
private :
/// Filling character
static const char fillchar = '=';
// The masks
static const uint32_t mask1 = 0xFC000000;
static const uint32_t mask2 = 0x03F00000;
static const uint32_t mask3 = 0x000FC000;
static const uint32_t mask4 = 0x00003F00;
typedef union
{
uint32_t l ;
char c[4];
}un32;
public:
static std::string encode(const std::string & data);
static std::string decode(const std::string & data);
};
#endif
////////////////////////////////////////////////////
/////////////////////BASE64.CPP/////////////////////
#include <base64.hpp>
using namespace std;
string Base64::encode(const std::string & data)
{
const size_t trail = data.size()%3;
size_t sz = data.size()/3*4;
sz += (trail != 0) ? 4 : 0;
un32 b64;
string out;
out.resize(sz);
size_t i = 0, k = 0;
while(i < data.size()-trail)
{
b64.c[3] = data[i++];
b64.c[2] = data[i++];
b64.c[1] = data[i++];
out[k++] = b64table[static_cast <int> ((b64.l & mask1) >> 26)];
out[k++] = b64table[static_cast <int> ((b64.l & mask2) >> 20)];
out[k++] = b64table[static_cast <int> ((b64.l & mask3) >> 14)];
out[k++] = b64table[static_cast <int> ((b64.l & mask4) >> 8)];
}
b64.l = 0;
switch(trail)
{
case 1:
b64.c[3] = data[i++];
out[k++] = b64table[static_cast <int> ((b64.l & mask1) >> 26)];
out[k++] = b64table[static_cast <int> ((b64.l & mask2) >> 20)];
out[k++] = fillchar;
out[k++] = fillchar;
break;
case 2:
b64.c[3] = data[i++];
b64.c[2] = data[i++];
out[k++] = b64table[static_cast <int> ((b64.l & mask1) >> 26)];
out[k++] = b64table[static_cast <int> ((b64.l & mask2) >> 20)];
out[k++] = b64table[static_cast <int> ((b64.l & mask3) >> 14)];
out[k++] = fillchar;
break;
}
return out;
}
string Base64::decode(const std::string & data)
{
// Number of trailing '='
const size_t trail = (data[data.size()-1] == fillchar) ? ((data[data.size()-2] == fillchar) ? 2 : 1 ) : 0;
// Number of char to decode
const size_t szin = (trail == 0) ? data.size() : data.size()-4;
// Output string size
const size_t szout = szin/4*3+ ((trail == 0)? 0 : ((trail == 1) ? 3 : 2));
un32 b64;
string out;
out.resize(szout);
size_t i = 0, k = 0;
while(i < szin)
{
b64.l = 0;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 26;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 20;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 14;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 8;
out[k++] = b64.c[3];
out[k++] = b64.c[2];
out[k++] = b64.c[1];
}
b64.l = 0;
switch(trail)
{
case 1:
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 26;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 20;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 14;
out[k++] = b64.c[3];
out[k++] = b64.c[2];
break;
case 2:
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 26;
b64.l += (static_cast < uint32_t > (b64table.find_first_of(data[i++])) ) << 20;
out[k++] = b64.c[3];
break;
}
return out;
}
////////////////////////////////////////////////////
Conclusion
Ici pour le Base64, le Uuencoding est dans le zip mais le principe reste le même.
Historique
- 15 avril 2008 10:09:26 :
- Ajout conclusion
- 05 septembre 2008 14:08:18 :
- Orthographe
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Codage Base64 en C [ par jcf1981 ]
Bonjour je cherche une fonction C pour décoder une chaine de caractère en base64 . Pour la coder en PHP , pas de soucis mais pour la d
bibliotheque d'encodage et de decodage MIME [ par ebooserge ]
salut a tous,voila je suis en train de realiser un petit serveur http et j'ai vu sur le net que pour envoyer des fichier binaires au navigateur il fal
Codage de Huffman [ par Trinity_vv ]
Salut, Je souhaiterais trouver un programme en C le plus simple possible me permettant de compresser et de decompresser des fichiers en utilisant la
Winsock Mail et MIME ! [ par wxccxw ]
salut ! j'avai une question : les envoi de Mail avec MIME jutilise winsock2 et j'envoi des commande sur un smtp : exemple : helo mail from: etc....
Problème avec une DLL C++ appelant une DLL C# depuis un network drive [ par SinaC ]
Bonjour, Le but du projet était d'utiliser une DLL C# depuis Powerbuilder, la solution à laquelle nous avons pensé &#
Codage image .img [ par gouzi_666 ]
Bonjour, je travaille sur un projet de traitement d'image. Les images ou plutôt les fichiers images sur lesquels je travaille sont des fichiers d
connaitre le codage des caractéres d'un fichier texte [ par faico ]
Salam Est ce qu'il ya une methode pour connaitre le codage des caractéres d'un fichier texte ?et merci d'avance ! <FONT face=Tahoma color=
Base64 de Unrealircd [ par logant83 ]
Bonsoir, voila enfaite je suis entrain de faire un services IRC en socket, mais voila le probléme c'est que je n'arrive pas à obtenir le hostname (L'a
Codage [ par ProgVal ]
Bonjour, J'ai construit un programme dans le but d'écrire, d'enregistrer, de charger... Tout fonctionne. Il y a:-un Memo(entrer et modifier les donn
Base64 [ par jean84 ]
Hello Je cherche a implémenter ma propre fonction de codage/décodage en base64. J'ai trouvé pas mal de codes ainsi que des articles traitant du sujet
|
Derniers Blogs
TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|