|
- const
- //BASE64码元表
- BaseTable: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //BASE64编码函数
- function BinToBase64(const PDat: PBYTE; const DatLen: DWORD): string;
- var s, s1: string;
- i, p, len, n, Addnum: DWORD;
- PBin: PBYTE;
- begin
- result := '';
- S := '';
- addnum := 0;
- PBin := PDat;
- for i := 1 to DatLen do
- begin
- S := S + IntToHex(PBin^, 2);
- PBin := PBYTE(DWORD(PDat) + i);
- end;
- case (length(s) mod 3) of
- 0: addnum := 0;
- 1: begin
- s := s + '00';
- addnum := 2;
- end;
- 2: begin
- s := s + '0';
- addnum := 1;
- end;
- end;
- len := length(s) div 3;
- for i := 1 to len do
- begin
- s1 := midstr(S, i * 3 - 2, 3);
- p := strtoint('$' + s1);
- n := p div 64;
- result := result + basetable[n + 1];
- n := p mod 64;
- result := result + basetable[n + 1];
- end;
- if addnum = 1 then result := result + '==';
- if addnum = 2 then result[length(result)] := '=';
- end;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //BASE64编码函数
- function StrtoBase64(const test: string): string;
- var s, s1: string;
- i, p, len, n, Addnum: DWORD;
- begin
- result := '';
- S := '';
- addnum := 0;
- for i := 1 to length(test) do
- S := S + IntToHex(Ord(test[i]), 2);
- case (length(s) mod 3) of
- 0: addnum := 0;
- 1: begin
- s := s + '00';
- addnum := 2;
- end;
- 2: begin
- s := s + '0';
- addnum := 1;
- end;
- end;
- len := length(s) div 3;
- for i := 1 to len do
- begin
- s1 := midstr(S, i * 3 - 2, 3);
- p := strtoint('$' + s1);
- n := p div 64;
- result := result + basetable[n + 1];
- n := p mod 64;
- result := result + basetable[n + 1];
- end;
- if addnum = 1 then result := result + '==';
- if addnum = 2 then result[length(result)] := '=';
- end;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //BASE64解码函数
- function Base64toStr(const test: string): string;
- var s, s1, m: string;
- i, len, t: DWORD;
- begin
- Result := '';
- if length(test) = 0 then exit;
- s := test;
- for i := 0 to 1 do
- if s[length(s)] = '=' then setlength(s, length(s) - 1);
- len := length(s) div 2;
- for i := 1 to len do
- begin
- s1 := midstr(s, i * 2 - 1, 2);
- t := (Pos(s1[1], BaseTable) - 1) * 64 + (Pos(s1[2], BaseTable) - 1);
- m := m + inttohex(t, 3)
- end;
- if length(s) mod 2 = 1 then
- begin
- t := (Pos(s[length(s)], BaseTable) - 1) * 64;
- m := m + inttohex(t, 3);
- setlength(m, length(m) - 2);
- end;
- len := length(m) div 2;
- for i := 1 to len do
- begin
- s := midstr(m, i * 2 - 1, 2);
- result := result + chr(strtoint('$' + s));
- end;
- end;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
复制代码
[ 本帖最后由 lxl1638 于 2008-2-13 01:17 PM 编辑 ] |
|