[c++] base64converter v1.1, un encodeur décodeur en base64

Soyez le premier à donner votre avis sur cette source.

Vue 15 931 fois - Téléchargée 816 fois

Description

Ce logiciel décode ou encode des chaînes de caractères ou des fichiers en base 64, un système qui convertit des données binaires en données texte (pour les mails).
Je n'en ai pas trouvé sur internet qui encode ET décode (un seul qui décode) donc je vous en fais profiter :).
J'ai conservé le code de base64.sourceforge.net, qui convertit à la fois les strings et les fichiers.
________________________________________

La version 1.0 traitait une façon originale de faire des threads, mais elle se révélait trop lente (et en réalité ce n'étaient pas des threads). Et l'appli était assez lourde (300ko) à cause des librairies STL. J'ai donc tout refait en C avec de vrais thread lancés avec _beginthread... Ca donne une petite appli de 41 Ko !
________________________________________

Ce code va me servir avant tout à créer un logiciel pour envoyer ou lire des emails avec ou sans pièce jointe, et comme le protocole MIME le veut, les pièces jointes sont encodées en base64 ou UUEncode.

Joyeux noël à tous !

Source / Exemple :


// Je laisse volontairement l'ancien code pour ceux qui n'ont pas vu la source 1.0
// URL de la source 1.0 : http://ordiman85.free.fr/logiciels/sources/Base64Converter%20v1.0%20-%20Source.zip
//
// Attention Ce code n'a plus aucun rapport avec le code de la version 1.1 !
//
// Pour les tâches d'arrière-plan
// 
// Une alliance en une boîte de dialogue et la fonction PeekMessage

// Variable définissant la tâche d'arrière-plan à lancer
int CallBackJob = 0;
MSG msg;
// CreateDialog est non-bloquante, on doit donc lancer GetMessage ou PeekMessage
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc);
// Boucle (presque) infinie (terminée par return 0;)
for (;;)
{
  // Traite tous les messages
  while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
    // Si le programme veut quitter
    if (msg.message == WM_QUIT)
      return 0;
    // Traitement dans Dialogproc
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  // Arrivé ici, il n'y a plus de messages, donc on peut continuer la tâche d'arrière-plan
  // Choisit la tâche à effectuer selon la variable CallBackJob définie auparavant
  switch (CallBackJob)
  {
    case JOB_ENCODE:
      OnEncode(hWnd);
      break;
    case JOB_DECODE:
      OnDecode(hWnd);
      break;
    default:
      // Attend un message
      WaitMessage();
      break;
  }
}

Conclusion :


Version 1.1, prête à compiler avec Code::Blocks
Logiciel disponible sur http://ordiman85.free.fr/

Si vous trouvez des bugs ou des erreurs, ça donnera lieu à des corrections, promis !

Joyeux noël à tous et bonne année ;)

Codes Sources

Ajouter un commentaire Commentaires
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Tu pourrais le développer dès aujourd'hui sous windows avec GTK+. Très rapide à développer car le code GTK+ est nettement plus simple que la programmation win32. Garder le module base64 et virer le reste. Si tu veux je te passe une ossature de fenêtre qui ressemble.
Messages postés
41
Date d'inscription
samedi 4 mars 2006
Statut
Membre
Dernière intervention
19 mars 2010

Si tu as un peu de temps dis moi comment je pourrais le faire porter sur linux au niveau des fenêtres et des contrôles ça m'intéresse vu que je vais surement passer sous linux bientot...
Merci d'avance
@+
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut, aujourd'hui c'est bien conçu, de façon modulaire avec des objets faciles à réemployer, le code est suffisamment commenté, ça fonctionne et c'est facile à porter sur linux -> j'ai mis 9.
Messages postés
41
Date d'inscription
samedi 4 mars 2006
Statut
Membre
Dernière intervention
19 mars 2010

Merci pour vos remarques ^^ ici ce qui m'intéresse c'est de faire une toute petite appli donc il vaut mieux que je la fasse en C.

En effet ce sont les bibliothèques stl qui alourdissent le programme !! En C le nouveau programme compilé (partiellement codé) occupe à peine une quarantaine de Ko. Merci encore ! :)

@+
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

La taille de ton programme vient exclusivement de l'utilisation des bibliothèques STL: sitôt que tu inclus iostream, string, vector, list, queue, stack, map, algorithm ................: n'importe lequel de ces olibrius, ton exe passe à 450 Ko sans l'option "strip". Si tu tiens à faire un petit exe, il faut t'en passer (c'est chiant ^_^). Dans la majorité des cas, on s'en tamponne pas mal que l'exe soit gros, et du reste: la fonction base64 toute seule ne "pèse" rien. Il y a deux cas de figure:

* soit tu as besoin d'un petit exe et tu l'adaptes pour utiliser des char* et des FILE plutôt que des string et des fstream

* soit tu utilises la fonction avec un programme qui inclus déjà la STL, auquel cas ça n'aura aucune incidence sur la taille de l'exe.
Afficher les 16 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.