1.通过函数转
function Base64ToStr1(const Base64: string): string;
var
I, J, K, Len, Len1: Integer;
B4: array[0..3] of Byte;
begin
if Base64 = '' then
begin
Result := '';
Exit;
end;
Len := Length(Base64);
if Len and 3 <> 0 then
raise Exception.Create('Invalid Base64 length');
Len1 := (Len shr 2) * 3;
SetString(Result, nil, Len1);
I := 1;
J := 1;
while I <= Len do
begin
for K := 0 to 3 do
begin
case Base64[I] of
'A'..'Z':
B4[K] := Ord(Base64[I]) - 65;
'a'..'z':
B4[K] := Ord(Base64[I]) - 71;
'0'..'9':
B4[K] := Ord(Base64[I]) + 4;
'+':
B4[K] := 62;
'/':
B4[K] := 63;
'=':
B4[K] := 0;
else
raise Exception.CreateFmt('#%d: Invalid char in Base64', [Ord(Base64[I])]);
end;
Inc(I);
end;
Result[J] := Chr((B4[0] shl 2) or (B4[1] shr 4));
Result[J + 1] := Chr((B4[1] shl 4) or (B4[2] shr 2));
Result[J + 2] := Chr((B4[2] shl 6) or B4[3]);
Inc(J, 3);
end;
I := Pos('=', Base64);
if I <> 0 then
begin
I := Len - I + 1;
Delete(Result, Len1 - I + 1, I);
end;
end;
2.用字符串流转
sst := TStringStream.Create(str);
sst.Position :=0;
ms := TMemoryStream.Create;
DecodeStream(sst,ms);