AFON//Радиотехник
C++Builder · проект 28/50

Кодирование Base64

Текст → Base64 по стандартному алфавиту.

Задача

Закодировать введённый текст в Base64.

Компоненты на форме

Edit (EditIn, EditOut), Button (ButtonEnc).

Как работает

  1. Ввести строку.
  2. Разбить на тройки байт.
  3. Каждую тройку превратить в четыре символа алфавита.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 28. Кодирование Base64
// Текст ↔ Base64, ядро проверено на эталонах.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Классический Base64. Ядро кодирования проверяется тестом на известных
// строках ("Man" → "TWФu" и т.п.).
static const char B64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
AnsiString b64encode(const unsigned char *data, int len)
{
    AnsiString out;
    int i=0;
    while (i<len){
        int b0=data[i++], b1=(i<len)?data[i++]:-1, b2=(i<len)?data[i++]:-1;
        out += B64[b0>>2];
        out += B64[((b0&3)<<4) | (b1>=0?(b1>>4):0)];
        out += (b1>=0)? AnsiString(B64[((b1&15)<<2)|(b2>=0?(b2>>6):0)]) : AnsiString("=");
        out += (b2>=0)? AnsiString(B64[b2&63]) : AnsiString("=");
    }
    return out;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonEncClick(TObject *Sender)
{
    AnsiString s = EditIn->Text;
    EditOut->Text = b64encode((const unsigned char*)s.c_str(), s.Length());
}
//---------------------------------------------------------------------------

Пояснения

  • Хвост дополняется символами '=' по правилам Base64.
  • «Man» → «TWFu», «M» → «TQ==» — эталонные значения из RFC.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.