在DELPHI里,把十六进制字符变成二进制的是否用这个HEXTOBIN函数能完成也就是将:‘FF’变成‘11111111’的二进制字符串的形式,如果是的话能否举个例子。

解决方案 »

  1.   

    呵呵,我自己写了一个,足以要包含StrUtils,Math这两个单元Function HexToBin(sHex:String):String;
      function StrToNum (s: string; base: Integer; neg: Boolean; max: Integer): Int64;
      var
        c:Char;
        iCount,iTemp:Integer;
      begin
        Result:=0;
        s:=UpperCase(Trim(s));
        if s='' then exit;    if s[1]='+' then
          Delete(s,1,1)
        else if s[1]='-' then
        begin
          Neg:=true;
          Delete(s,1,1);
        end
        else if s[1]='1' then
        begin
          if (Base=2) and Neg then
          begin
            Neg:=true;
            Delete(s,1,1);
          end
          else
             Neg:=false;
        end
        else
          Neg:=false;    s:=ReverseString(s);
        iTemp:=0;
        for iCount:=1 to Length(s) do
        begin
          c:=s[iCount];
          Case c Of
            '0'..'9':iTemp:=Ord(c)-48;
            'A'..'Z':iTemp:=Ord(c)-55;
            else Break;
          end;
          if iTemp>=Base then Break;
          Result:=Result+Round(iTemp*Power(Base,(iCount-1)));
        end;
        if Neg then Result:=Result*(-1);
      end;  function NumToStr (num, len, base: Integer; neg: Boolean; fill: char): string;
      var
        s: string;
        digit: Integer;
      begin
        num:= ABS (num);
        if ((base >= 2) and (base <= 36)) then
        begin
          s:= '';
          repeat
            digit:= num mod base;
            if digit < 10 then
              Insert (CHR (digit + 48), s, 1)
            else
              Insert (CHR (digit + 55), s, 1);
            num:= num div base;
          until num = 0;
          if neg then  Insert ('-', s, 1);
          while Length(s) < len do Insert (fill, s, 1);
        end;
        Result:= s;
      end;
    var
      sTemp:String;
      iTemp:Integer;
    begin
      Result:='';
      While sHex>'' do
      Begin
        sTemp:=Copy(sHex,1,1);
        Delete(sHex,1,1);    iTemp:=StrToNum(sTemp,16,false,MaxInt);
        Result:=Result+NumToStr(iTemp,4,2,false,'0');
      end;
    end;