me tiraba unos caracteres diferentes al codificar
asi que a prueba y error quedo funcional en delphi 7
las 2 peronas del subforo delphi que entienden en este tema,
me corrijan si cometi una burrada
unit Unit2;
//unit untComBase64;
{SHL realiza un corrimiento de los bits del primer
operando hacia la izquierda (SHift Left),
inyectando ceros por la derecha. Se desplazan
tantos bits como se indique en el segundo operando. Ejemplo:
var
a: byte;
begin
a := $57; // 01010111
a := a shl 1; // 10101110
a := a shl 2; // 10111000
.....
SHR es como SHL, pero el corrimiento
curre hacia la derecha, inyectándose ceros por la izquierda. }
interface
uses SysUtils,dialogs;
function encode64(s: string): string;
function decode64(s: string): string;
implementation
const
tabChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
function encode64(s: string): string;
var
i : Integer; // compteur
charCode: Integer; // code du caract?re dans la table Unicode
valToDec: Integer; // valeur ? d?cr?menter au fur ? mesure de la conversion
nbrBits : Integer; // nombre de bits actuellement dans vaToDec (maximum 16 + 4)
charPos : Integer; // position dans le tableau de codage en base64
begin
Result := '';
charCode := 0;
nbrBits := 0;
valToDec := 0;
//parcours des caract?res
for i := 1 to (Length(s)) do
begin
///aca esta la magia resolver
//multiplicar por 4
//http://docwiki.embarcadero.com/RADStudio/Seattle/en/String_Types_(Delphi)
charCode := (Ord(s[i])*4);
nbrBits := nbrBits + 16;
valToDec := (valToDec shl 16) + charCode;
// traiter les bits tant que l'on sais faire des groupements de 6
// Procesar los bits como se le conoce a grupos de 6
while (nbrBits - 6) >=0 do
begin
nbrBits := (nbrBits - 6);
charPos := (valToDec shr (nbrBits ));
//
valToDec := valToDec - (charPos shl nbrBits);
Result := Result + tabChar[charPos + 1];
end;
end;
//EN ESTA PARTE HABRIA QUE COLOCAR EL PRIMER CARACTER AL FINAL
//y deletearlo
result:=result+ (copy(result,0,1));
delete(result,1,1);
showmessage(result);
// gestion des desniers bits + ajout des compl?ments
if nbrBits > 0 then
begin
charPos := valToDec shl (6 - nbrBits);
Result := Result + tabChar[charPos + 1];
for i := 1 to (6 - nbrBits) div 2 do
Result := Result + '=';
end;
end;