Как говорится, без комментариев, перевод в BASE64 в 1С7.7
Функция КодироватьBase64(Текст)
Перем Алфавит;
Перем Группа, Символ;
Перем Значение, Разряд;
Перем Символ6, Значение6;
Перем Значение8, Символ8;
Перем Текст64;
// Подготовка алфавита и результата
Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
Текст64 = "";
Группа = "";
Для Номер=1 По СтрДлина(Текст) Цикл
Символ = Сред(Текст, Номер, 1);
Группа = Группа + Символ;
Если ((СтрДлина(Группа) = 3) или (Номер = СтрДлина(Текст))) Тогда
// Получение числового значения из 3-х символов
Значение = 0;
Разряд = 2;
Пока Разряд >= 0 Цикл
Символ8 = Сред(Группа, 3 - Разряд, 1);
Значение8 = КодСимв(Символ8);
Если Разряд = 1 Тогда
Значение8 = Значение8 * 256;
ИначеЕсли Разряд = 2 Тогда
Значение8 = Значение8 * 256 * 256;
КонецЕсли;
Значение = Значение + Значение8;
Разряд = Разряд - 1;
КонецЦикла;
// Получение 4-х символов из числового значения
Разряд = 3;
Пока Разряд >= 0 Цикл
Значение6 = Значение;
Если Разряд = 3 Тогда
Значение6 = Цел(Значение6 / 64 / 64 / 64);
Значение = Значение - Значение6 * 64 * 64 * 64;
ИначеЕсли Разряд = 2 Тогда
Значение6 = Цел(Значение6 / 64 / 64);
Значение = Значение - Значение6 * 64 * 64;
ИначеЕсли Разряд = 1 Тогда
Значение6 = Цел(Значение6 / 64);
Значение = Значение - Значение6 * 64;
КонецЕсли;
Если СтрДлина(Группа) < 3 Тогда
Если Значение6 = 0 Тогда
Значение6 = 64;
КонецЕсли;
КонецЕсли;
Символ6 = Сред(Алфавит, Значение6+1,1);
Текст64 = Текст64 + Символ6;
Разряд = Разряд - 1;
КонецЦикла;
Группа = "";
КонецЕсли;
КонецЦикла;
Возврат Текст64;
КонецФункции
13 thoughts on “Перекодирование в BASE64 в 1С7.7”