{编码函数:输入——text,输出——entext}
void EncodeText(char *text,char *entext)
{
char tmpmessage[160];
char ASC64[64];
int i,k,Length,j; for(i=0;i<12;i++)
ASC64[i]=48+i;
for(i=12;i<38;i++)
ASC64[i]=53+i;
for(i=38;i<64;i++)
ASC64[i]=59+i; memcpy(tmpmessage,text,158);
tmpmessage[159]=0;
Length=strlen(tmpmessage);
k=0;
j=0;
for(i=0,k=0,j=0;i<Length/3;i++){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=((tmpmessage[j]<<4)|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
entext[k++]=(tmpmessage[j+1]<<2|((tmpmessage[j+2]>>6)&0x03))&0x3F;
entext[k++]=tmpmessage[j+2]&0x3F;
j=j+3;
}
if(Length%3==0)
entext[k]=0;
if(Length%3==1){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=(tmpmessage[j]<<4)&0x3F;
entext[k]=0;
}
if(Length%3==2){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=(tmpmessage[j]<<4|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
entext[k++]=(tmpmessage[j+1]<<2)&0x3F;
entext[k]=0;
}
Length=strlen(entext);
for(i=0;i<Length;i++)
entext[i]=ASC64[entext[i]];
entext[Length]=0;
}
void EncodeText(char *text,char *entext)
{
char tmpmessage[160];
char ASC64[64];
int i,k,Length,j; for(i=0;i<12;i++)
ASC64[i]=48+i;
for(i=12;i<38;i++)
ASC64[i]=53+i;
for(i=38;i<64;i++)
ASC64[i]=59+i; memcpy(tmpmessage,text,158);
tmpmessage[159]=0;
Length=strlen(tmpmessage);
k=0;
j=0;
for(i=0,k=0,j=0;i<Length/3;i++){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=((tmpmessage[j]<<4)|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
entext[k++]=(tmpmessage[j+1]<<2|((tmpmessage[j+2]>>6)&0x03))&0x3F;
entext[k++]=tmpmessage[j+2]&0x3F;
j=j+3;
}
if(Length%3==0)
entext[k]=0;
if(Length%3==1){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=(tmpmessage[j]<<4)&0x3F;
entext[k]=0;
}
if(Length%3==2){
entext[k++]=(tmpmessage[j]>>2)&0x3F;
entext[k++]=(tmpmessage[j]<<4|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
entext[k++]=(tmpmessage[j+1]<<2)&0x3F;
entext[k]=0;
}
Length=strlen(entext);
for(i=0;i<Length;i++)
entext[i]=ASC64[entext[i]];
entext[Length]=0;
}
//910.78910.com
unit Unit2;interface
procedure EncodeText(text: string; out entext: string);
implementation{
语法已经我给你翻译称Pascal语言了,因为语言不同可能存在以下问题你自己解决,
已在Delphi 5编译通过!
1、Pascal 里string 格式的字符串索引是从1开始,不是0开始!
2、在字符串末尾没必要加NULL,也就是0。也许我写的#0 也没必要加
3、请确认++是否改正确。
4、确认语句 entext[i]:= ASC64[ord(entext[i])];是否正确。
5、Pascal 的for 循环始终是包含边界的,不象C自由,也没有 i+= 3。
6、给分吧大哥,我花了半个多小时休息时间给改的,Kiss一下,呵呵
}
procedure EncodeText(text: string; out entext: string);
var
tmpmessage: string[160];
ASC64: string[64];
i,k,Length1,j: integer;
Begin
for i:= 0 to 12 - 1 do
ASC64[i]:= chr(48 + i);
for i:=12 to 38 - 1 do
ASC64[i]:= chr(53 + i);
for i:=38 to 64 - 1 do
ASC64[i]:= chr(59 + i); tmpmessage:= Copy(text, 1, 158); //memcpy(tmpmessage,text,158); //tmpmessage[159]:=0;
Length1:= length(tmpmessage); k:=0;
j:=0;
for i:=0 to Length1 div 3 - 1 do
Begin
k:= ord(tmpmessage[j]) shr 2;
entext[k]:= chr((ord(tmpmessage[j]) shr 2) and $3F);
inc(k);
entext[k]:= chr(((ord(tmpmessage[j]) shl 4) or ((ord(tmpmessage[j+1]) shr 4) and $0F)) and $3F);
inc(k);
entext[k]:= chr((ord(tmpmessage[j+1]) shl 2 or ((ord(tmpmessage[j+2]) shr 6) and $03)) and $3F);
inc(k);
entext[k]:= chr(ord(tmpmessage[j+2]) and $3F);
inc(k);
inc(j, 3);//j=j+3;
End;
if Length1 mod 3 =0 then
entext[k]:= #0;
if Length1 mod 3 = 1 then
Begin
entext[k]:= chr((ord(tmpmessage[j]) shr 2) and $3F);
inc(k);
entext[k]:= chr((ord(tmpmessage[j]) shl 4) and $3F);
inc(k);
entext[k]:= #0;
End;
if Length1 mod 3 = 2 then
Begin
entext[k]:= chr((ord(tmpmessage[j]) shr 2) and $3F);
inc(k);
entext[k]:= chr((ord(tmpmessage[j]) shl 4 or ((ord(tmpmessage[j+1]) shr 4) and $0F)) and $3F);
inc(k);
entext[k]:= chr((ord(tmpmessage[j+1]) shl 2) and $3F);
inc(k);
entext[k]:= #0;
End;
Length1:= length(entext);
for i:=0 to Length1 - 1 do
entext[i]:= ASC64[ord(entext[i])]; //不知道是否这意思?entext[i]:= ASC64[entext[i]];
entext[Length1]:=#0;
End;
end.
//“k:= ord(tmpmessage[j]) shr 2;”这句话没有用~~
//man8888来亲一口!~~procedure EncodeText(mSource: PChar; mDest: PChar);
const
cASC64: array[0..63] of Char =
'0123456789:;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var
vBuffer: array[0..160] of Char;
I, K, L, J: Integer;
begin
StrLCopy(vBuffer, mSource, 158);
vBuffer[159] := #0;
L := StrLen(vBuffer);
K := 0;
J := 0;
for I := 0 to L div 3 - 1 do begin
mDest[K]:= Chr((Ord(vBuffer[J]) shr 2) and $3F);
Inc(K);
mDest[K]:= Chr(((Ord(vBuffer[J]) shl 4) or ((Ord(vBuffer[J + 1]) shr 4) and $0F)) and $3F);
Inc(K);
mDest[K]:= Chr((Ord(vBuffer[J + 1]) shl 2 or ((Ord(vBuffer[J + 2]) shr 6) and $03)) and $3F);
Inc(K);
mDest[K]:= Chr(Ord(vBuffer[J + 2]) and $3F);
Inc(K);
Inc(J, 3);
end; if L mod 3 = 0 then mDest[K] := #0; if L mod 3 = 1 then begin
mDest[K] := Chr((Ord(vBuffer[J]) shr 2) and $3F);
Inc(K);
mDest[K]:= Chr((Ord(vBuffer[J]) shl 4) and $3F);
Inc(K);
mDest[K]:= #0;
end; if L mod 3 = 2 then begin
mDest[K]:= Chr((Ord(vBuffer[J]) shr 2) and $3F);
Inc(K);
mDest[K]:= Chr((Ord(vBuffer[J]) shl 4 or ((Ord(vBuffer[J + 1]) shr 4) and $0F)) and $3F);
Inc(K);
mDest[K]:= Chr((Ord(vBuffer[J + 1]) shl 2) and $3F);
Inc(K);
mDest[K]:= #0;
end; L := StrLen(mDest);
for I := 0 to L - 1 do mDest[I] := cASC64[Ord(mDest[I])];
mDest[L] := #0;
end; { EncodeText }//Demo
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..256] of Char;
begin
EncodeText(PChar(Edit1.Text), vBuffer);
Edit2.Text := vBuffer;
end;