📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
BaseTable: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';//BaseTable为BASE64码表
var
Form1: TForm1;
function DecodeBase64(Source: string): string; //解码函数
function EncodeBase64(Source: string): string; //编码函数
function FindInTable(CSource:char):integer; //
implementation
{$R *.DFM}
function FindInTable(CSource:char):integer;
begin
result:=Pos(string(CSource),BaseTable)-1;
end;
function DecodeBase64(Source: string): string;
var
SrcLen, Times, i: integer;
x1, x2, x3, x4, xt: byte;
begin
result := '';
SrcLen := Length(Source);
Times := SrcLen div 4;
for i := 0 to Times - 1 do
begin
x1 := FindInTable(Source[1 + i * 4]);
x2 := FindInTable(Source[2 + i * 4]);
x3 := FindInTable(Source[3 + i * 4]);
x4 := FindInTable(Source[4 + i * 4]);
x1 := x1 shl 2;
xt := x2 shr 4;
x1 := x1 or xt;
x2 := x2 shl 4;
result := result + chr(x1);
if x3 = 64 then break;
xt := x3 shr 2;
x2 := x2 or xt;
x3 := x3 shl 6;
result := result + chr(x2);
if x4 = 64 then break;
x3 := x3 or x4;
result := result + chr(x3);
end;
end;
function EncodeBase64(Source: string): string;
var
Times, LenSrc, i: integer;
x1, x2, x3, x4: char;
xt: byte;
begin
result := '';
LenSrc := length(Source);
if LenSrc mod 3 = 0 then
Times := LenSrc div 3
else
Times := LenSrc div 3 + 1;
for i := 0 to times - 1 do
begin
if LenSrc >= (3 + i * 3) then
begin
x1 := BaseTable[(ord(Source[1 + i * 3]) shr 2) + 1];
xt := (ord(Source[1 + i * 3]) shl 4) and 48;
xt := xt or (ord(Source[2 + i * 3]) shr 4);
x2 := BaseTable[xt + 1];
xt := (Ord(Source[2 + i * 3]) shl 2) and 60;
xt := xt or (ord(Source[3 + i * 3]) shr 6);
x3 := BaseTable[xt + 1];
xt := (ord(Source[3 + i * 3]) and 63);
x4 := BaseTable[xt + 1];
end
else
if LenSrc >= (2 + i * 3) then
begin
x1 := BaseTable[(ord(Source[1 + i * 3]) shr 2) + 1];
xt := (ord(Source[1 + i * 3]) shl 4) and 48;
xt := xt or (ord(Source[2 + i * 3]) shr 4);
x2 := BaseTable[xt + 1];
xt := (ord(Source[2 + i * 3]) shl 2) and 60;
x3 := BaseTable[xt + 1];
x4 := '=';
end
else
begin
x1 := BaseTable[(ord(Source[1 + i * 3]) shr 2) + 1];
xt := (ord(Source[1 + i * 3]) shl 4) and 48;
x2 := BaseTable[xt + 1];
x3 := '=';
x4 := '=';
end;
result := result + x1 + x2 + x3 + x4;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text:=EncodeBase64(edit1.Text);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -