绝对双刃茉莉漫画:字符串与二进制数之间的互相转换 - Http://www.xuedelphi.com

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 19:38:47
字符串与二进制数之间的互相转换
减小字体 增大字体 作者:佚名  来源:不详  发布时间:2011-01-28 11:59:12
将一个字符串转为二进制,再从二进制转为原字符串。  
 
   把字符串(可含中文字符)转为二进制数的函数:ConvertStrToBin();把二进制数转换为字符串的函数:ConvertBinToStr()。  
   以下两个函数亦可以对包含有中文字符的字符串进行处理,逆转时亦可正常转为中文。  
Function ConvertStrToBin(Value : string):string;//把字符串转化为二进制数  
var tempHex : string[2];  
    i : integer;  
begin 
  Result := '';  
  if trim(Value) = '' then Exit;  
  tempHex := '';  
  for i := 1 to Length(Value) do 
  begin 
    tempHex := IntToHex(Ord(Value[i]),2);//每个字符转成两位十六进制数  
    Result := Result + BinToHexEachOther(tempHex,False);//十六进制转成二进制  
  end;  
end;  
 
Function ConvertBinToStr(Value : string):string; //把二进制数据转化为字符串  
Var tempHex : string;  
    i, tempInt : integer;  
begin 
  Result := '';  
  if trim(Value) = '' then Exit;  
  tempHex := BinToHexEachOther(Value,true);//二进制转成十六进制  
  i := 0;  
  Repeat  
    begin 
      i := i + 1;  
      tempInt := HexCharToInt(tempHex[i]);  
      i := i + 1;  
      tempInt := tempInt * 16 + HexCharToInt(tempHex[i]);  
       //以上将两位十六进制数转变为一个十进制数  
      Result := Result + chr(TempInt); //转成ASCII码  
    end;  
  Until i >= length(tempHex)  
end;  
 
上两个互逆的函数中要调用到的函数HexCharToInt()和BinToHexEachOther()如下:  
 
function BinToHexEachOther(ValueA : string; Action : Boolean) : string;  
  //把二进制串转换成十六进制串或相反  
  var 
    ValueArray1 : Array [0..15] of string[4];  
    ValueArray2 : Array [0..15] of char;  
    i : shortint;  
begin 
    //数组初始化  
    ValueArray1[0] := '0000';  ValueArray1[1] := '0001';  ValueArray1[2] := '0010';  
    ValueArray1[3] := '0011';  ValueArray1[4] := '0100';  ValueArray1[5] := '0101';  
    ValueArray1[6] := '0110';  ValueArray1[7] := '0111';  ValueArray1[8] := '1000';  
    ValueArray1[9] := '1001';  ValueArray1[10] := '1010';  ValueArray1[11] := '1011';  
    ValueArray1[12] := '1100';  ValueArray1[13] := '1101';  ValueArray1[14] := '1110';  
    ValueArray1[15] := '1111';  
    for i := 0 to 15 do 
      if i >= 10 then ValueArray2[i] := chr(65 + (i - 10))  
      else ValueArray2[i] := inttostr(i)[1];  
 
    Result := '';  
    if Action then 
    begin //二进制串转换成十六进制串  
      if (Length(ValueA) MOD 4 <> 0) then 
        ValueA := stringofchar('0',Length(ValueA) MOD 4) + ValueA;  
      while (Length(ValueA) >= 4) do 
      begin 
        for i := 0 to 15 do 
          if Copy(ValueA,1,4) = ValueArray1[i] then 
            Result := Result + ValueArray2[i];  
        ValueA := Copy(ValueA,5,Length(ValueA) - 4);  
      end;  
    end 
    else begin //十六进制串转换成二进制串  
      while (Length(ValueA) >= 1) do 
      begin 
        for i := 0 to 15 do 
          if Copy(ValueA,1,1) = ValueArray2[i] then 
            Result := Result + ValueArray1[i];  
        ValueA := Copy(ValueA,2,Length(ValueA) - 1);  
      end;  
    end;  
end;  
 
function HexCharToInt(HexToken : char):Integer;  
begin 
Result:=0;  
if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 } 
   Result:=Ord(HexToken)-48 
else if (HexToken>#64) and (HexToken<#71) then  { chars A....F } 
   Result:=Ord(HexToken)-65 + 10;  
end;  
 
 
十六进制字串转十进制又一法:  
procedure TForm1.BitBtn1Click(Sender: TObject);  
var myint : integer;  
begin 
  myint := StrToInt('$' + '3A'); // myint = 58  
  showmessage(inttostr(myint));  
end; [本文来自: 学Delphi网(http://www.xuedelphi.com/) ]详细出处参考:http://www.xuedelphi.cn/article/html2010/2011012812012475.html