#include <Arduino.h>
char *originalString = "Привет, ESP32!";
char encodedString[128];
char decodedString[128];
// Таблица символов Base64
const char base64Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
void base64Encode(const char *input, char *output) {
int inputLength = strlen(input);
int i = 0, j = 0;
while (i < inputLength) {
uint32_t octet_a = i < inputLength ? (unsigned char)input[i++] : 0;
uint32_t octet_b = i < inputLength ? (unsigned char)input[i++] : 0;
uint32_t octet_c = i < inputLength ? (unsigned char)input[i++] : 0;
uint32_t triple = (octet_a << 16) | (octet_b << 8) | octet_c;
output[j++] = base64Table[(triple >> 18) & 0x3F];
output[j++] = base64Table[(triple >> 12) & 0x3F];
output[j++] = i > inputLength + 1 ? '=' : base64Table[(triple >> 6) & 0x3F];
output[j++] = i > inputLength ? '=' : base64Table[triple & 0x3F];
}
output[j] = '\0';
}
void base64Decode(const char *input, char *output) {
int inputLength = strlen(input);
int i = 0, j = 0;
uint8_t base64ReverseTable[256] = {0};
for (int k = 0; k < 64; k++) {
base64ReverseTable[(uint8_t)base64Table[k]] = k;
}
while (i < inputLength) {
uint32_t sextet_a = input[i] == '=' ? 0 & i++ : base64ReverseTable[(uint8_t)input[i++]];
uint32_t sextet_b = input[i] == '=' ? 0 & i++ : base64ReverseTable[(uint8_t)input[i++]];
uint32_t sextet_c = input[i] == '=' ? 0 & i++ : base64ReverseTable[(uint8_t)input[i++]];
uint32_t sextet_d = input[i] == '=' ? 0 & i++ : base64ReverseTable[(uint8_t)input[i++]];
uint32_t triple = (sextet_a << 18) | (sextet_b << 12) | (sextet_c << 6) | sextet_d;
if (j < inputLength) output[j++] = (triple >> 16) & 0xFF;
if (j < inputLength) output[j++] = (triple >> 8) & 0xFF;
if (j < inputLength) output[j++] = triple & 0xFF;
}
output[j] = '\0';
}
void setup() {
Serial.begin(115200);
delay(1000); // Ждём, пока Serial откроется
Serial.println("ESP32 Manual Base64 Encoding and Decoding Example");
// Кодирование
base64Encode(originalString, encodedString);
Serial.print("Encoded: ");
Serial.println(encodedString);
// Декодирование
base64Decode(encodedString, decodedString);
Serial.print("Decoded: ");
Serial.println(decodedString);
}
void loop() {
delay(1000); // Повторяем каждую секунду, если требуется
}
Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1