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

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

A voir également

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.