Getting Bas64 codeunit:
OBJECT Codeunit 50050 Base64 Converter
{
OBJECT-PROPERTIES
{
Date=11/07/22;
Time=10:33:22 PM;
Modified=Yes;
Version List=;
}
PROPERTIES
{
OnRun=BEGIN
END;
}
CODE
{
VAR
zak@10014500 : DotNet "'Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.Microsoft.CSharp.RuntimeBinder.Binder";
PROCEDURE TextToBase64String@10014501(Value@10014500 : Text) Base64Str : Text;
VAR
length@10014501 : Integer;
BinaryValue@10014502 : Text;
BEGIN
BEGIN
// Divide value into blocks of 3 bytes
length := STRLEN(Value);
BinaryValue := TextToBinary(Value,8);
//MESSAGE(BinaryValue);
Base64Str := ConvertBinaryValueToBase64String(BinaryValue,length);
END;
END;
LOCAL PROCEDURE StreamToBase64String@10014505(value@10014500 : InStream) Base64St : Text;
VAR
SingleByte@10014501 : Byte;
Length@10014502 : Integer;
BinaryValue@10014503 : Text;
BEGIN
BEGIN
WHILE NOT value.EOS DO BEGIN
value.READ(SingleByte,1);
Length += 1;
BinaryValue += ByteToBinary(SingleByte,8);
END;
Base64St := ConvertBinaryValueToBase64String(BinaryValue,Length);
END;
END;
LOCAL PROCEDURE FromBase64StringToText@10014510(Value@10014500 : Text) Text : Text;
VAR
BinaryValue@10014501 : Text;
BEGIN
BEGIN
BinaryValue := ConvertBase64StringToBinaryValue(Value);
Text := BinaryToText(BinaryValue);
END;
END;
LOCAL PROCEDURE FromBase64StringToStream@10014512(Value@10014500 : Text;VAR Stream@10014501 : OutStream);
VAR
BinaryValue@10014502 : Text;
BEGIN
BEGIN
BinaryValue := ConvertBase64StringToBinaryValue(Value);
BinaryToStream(BinaryValue,Stream);
END;
END;
PROCEDURE ConvertBinaryValueToBase64String@10014504(Value@10014500 : Text;Length@10014501 : Integer) Base64Str : Text;
VAR
Length2@10014502 : Integer;
PaddingCount@10014503 : Integer;
BlockCount@10014504 : Integer;
Pos@10014505 : Integer;
CurrentByte@10014506 : Text;
i@10014507 : Integer;
BEGIN
BEGIN
IF Length MOD 3 = 0 THEN BEGIN
PaddingCount := 0;
BlockCount := Length / 3;
END ELSE BEGIN
PaddingCount := 3 - (Length MOD 3);
BlockCount := (Length + PaddingCount) / 3;
END;
Length2 := Length + PaddingCount;
Value := PADSTR(Value,Length2 * 8,'0');
// Loop through bytes in groups of 6 bits
Pos := 1;
WHILE Pos < Length2 * 8 DO BEGIN
CurrentByte := COPYSTR(Value,Pos,6);
Base64Str += GetBase64Char(BinaryToInt(CurrentByte));
Pos += 6;
END;
// Replace last characters with '='
FOR i := 1 TO PaddingCount DO BEGIN
Pos := STRLEN(Base64Str) - i + 1;
Base64Str[Pos] := '=';
END;
END;
END;
LOCAL PROCEDURE ConvertBase64StringToBinaryValue@10014507(Value@10014500 : Text) BinaryTxt : Text;
VAR
BinaryValue@10014501 : Text;
i@10014502 : Integer;
IntValue@10014503 : Integer;
PaddingCount@10014504 : Integer;
BEGIN
BEGIN
FOR i := 1 TO STRLEN(Value) DO BEGIN
IF Value[i] = '=' THEN
PaddingCount += 1;
IntValue := GetBase64Number(FORMAT(Value[i]));
BinaryValue += IncreaseStringLength(IntToBinary(IntValue),6);
END;
FOR i := 1 TO PaddingCount DO
BinaryValue := COPYSTR(BinaryValue,1,STRLEN(BinaryValue) - 8);
BinaryTxt := BinaryValue;
END;
END;
PROCEDURE TextToBinary@10014509(Value@10014500 : Text;ByteLength@10014501 : Integer) BinaryStr : Text;
VAR
IntValue@10014502 : Integer;
i@10014503 : Integer;
BinaryValue@10014504 : Text;
BEGIN
BEGIN
FOR i := 1 TO STRLEN(Value) DO BEGIN
IntValue := Value[i];
//MESSAGE(FORMAT(Value[i]));
BinaryValue := IntToBinary(IntValue);
BinaryValue := IncreaseStringLength(BinaryValue,ByteLength);
BinaryStr += BinaryValue;
END;
END;
END;
LOCAL PROCEDURE BinaryToText@10014513(Value@10014500 : Text) TextOutput : Text;
VAR
Buffer@10014501 : BigText;
Pos@10014502 : Integer;
SingleByte@10014503 : Text;
CharValue@10014504 : Text;
BEGIN
BEGIN
Buffer.ADDTEXT(Value);
Pos := 1;
WHILE Pos < Buffer.LENGTH DO BEGIN
Buffer.GETSUBTEXT(SingleByte,Pos,8);
CharValue[1] := BinaryToInt(SingleByte);
TextOutput += CharValue;
Pos += 8;
END;
END;
END;
LOCAL PROCEDURE BinaryToStream@10014515(Value@10014500 : Text;VAR Stream@10014501 : OutStream);
VAR
Buffer@10014502 : BigText;
Pos@10014503 : Integer;
SingleByte@10014504 : Text;
ByteValue@10014505 : Byte;
BEGIN
BEGIN
Buffer.ADDTEXT(Value);
Pos := 1;
WHILE Pos < Buffer.LENGTH DO BEGIN
Buffer.GETSUBTEXT(SingleByte,Pos,8);
ByteValue := BinaryToInt(SingleByte);
Stream.WRITE(ByteValue,1);
Pos += 8;
END;
END;
END;
LOCAL PROCEDURE ByteToBinary@10014517(Value@10014500 : Byte;ByteLenght@10014501 : Integer) BinaryOutput : Text;
VAR
BinaryValue@10014502 : Text;
BEGIN
BEGIN
BinaryValue := IntToBinary(Value);
BinaryValue := IncreaseStringLength(BinaryValue,ByteLenght);
BinaryOutput := BinaryValue;
END;
END;
LOCAL PROCEDURE IntToBinary@10014519(Value@10014500 : Integer) BinaryOutput : Text;
BEGIN
BEGIN
WHILE Value >= 1 DO BEGIN
BinaryOutput := FORMAT(Value MOD 2) + BinaryOutput;
Value := Value DIV 2;
END;
END;
END;
LOCAL PROCEDURE BinaryToInt@10014521(Value@10014500 : Text) IntegerOutput : Integer;
VAR
Multiplier@10014501 : BigInteger;
IntValue@10014502 : Integer;
i@10014503 : Integer;
BEGIN
BEGIN
Multiplier := 1;
FOR i := STRLEN(Value) DOWNTO 1 DO BEGIN
EVALUATE(IntValue,COPYSTR(Value,i,1));
IntegerOutput += IntValue * Multiplier;
Multiplier *= 2;
END;
END;
END;
LOCAL PROCEDURE IncreaseStringLength@10014524(Value@10014500 : Text;ToLength@10014501 : Integer) Output : Text;
VAR
ExtraLength@10014502 : Integer;
ExtraText@10014503 : Text;
BEGIN
BEGIN
ExtraLength := ToLength - STRLEN(Value);
IF ExtraLength < 0 THEN
EXIT;
ExtraText := PADSTR(ExtraText,ExtraLength,'0');
Output := ExtraText + Value;
END;
END;
LOCAL PROCEDURE GetBase64Char@10014526(Value@10014500 : Integer) : Text;
VAR
chars@10014501 : Text;
i@10014502 : Integer;
BEGIN
BEGIN
chars := Base64Chars;
EXIT(FORMAT(chars[Value + 1]));
END;
END;
LOCAL PROCEDURE GetBase64Number@10014529(Value@10014500 : Text) : Integer;
VAR
chars@10014501 : Text;
BEGIN
BEGIN
IF Value = '=' THEN
EXIT(0);
chars := Base64Chars;
EXIT(STRPOS(chars,Value) - 1);
END;
END;
LOCAL PROCEDURE Base64Chars@10014532() : Text;
BEGIN
BEGIN
EXIT('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
END;
END;
BEGIN
END.
}
}