#include <Arduino.h>
// Таблица для обратного преобразования Base64
const char base64Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
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'; // Завершающий символ строки
}
const char *encodedString = "0J/RgNC40LLQtdGCLCDQvNC40YAh"; // Закодированная строка
char decodedString[128]; // Буфер для результата декодирования
void setup() {
Serial.begin(115200);
delay(1000); // Ждём, пока Serial откроется
Serial.println("ESP32 Manual Base64 Decoding Example");
// Раскодирование
base64Decode(encodedString, decodedString);
Serial.print("Decoded: ");
Serial.println(decodedString);
}
void loop() {
delay(1000); // Повторяем каждую секунду, если требуется
}