如何把十六进制数转换成二进制?
比如我的十六进制数是:1F,要转换成二进制数。
我知道有转换函数
HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer
但是具体怎么用?我用了总是出错。 :(

解决方案 »

  1.   

    你是不是没有用GetMem(Buffer,BufSize);来取得Buffer的内存?
    另外,16进制数Text中要用小写字母,不能用大写的
      

  2.   

    HexToBin这个函数并不能实现你的要求
    它只是实现HEX和ASCII的转换
    比如'3454'
    它会转换成'4A'
    因为34是'4'的ASCII
    54是'A'的ASCII所以你必须自己写函数
      

  3.   

    那么这个函数怎么用?HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer我已经取回串口传回来的值,并把它存到一个字符串了(已转换成十六进制),我现在要取字符串中第5,6两位(也就是一个十六进制数,如:2F),我的这个十六进制数的作用是:前3 bit 为系统类别编码,后5 bit 为系统软件版本编号,所以我必须先把这个十六进制数转换成二进制,然后取二进制的后5 bit,得出系统软件版本编号,这个是我最终想要的结果。
      

  4.   

    回复人: lion_lh(xmanx) ( ) 信誉:100  2003-5-21 11:03:00  得分:20 function HexToBin(Hexadecimal: string): string;
    const
      BCD: array [0..15] of string =    ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',    '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111');
    var
      i: integer;
    begin
      for i := Length(Hexadecimal) downto 1 do
        Result := BCD[StrToInt('$' + Hexadecimal[i])] + Result;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  5.   

    或者用IdGlobal单元的:function IntToBin(Value: cardinal): string;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  6.   

    var
      i:Integer;
      s:string;
     
    s:='2F';
    i:=StrToInt('$'+s);
    CodeType:=i and $60; //1110 0000
    CodeType:=CodeType shr 5;
    Ver:=i and $1F; //0001 1111
      

  7.   

    可以自己写代码:
        case i of 
         '1' : temp:=temp+'0001'
         '2' : temp:=temp+'0010'
          ........
         'f' : temp:=temp+'1111'
      end case 
        ........
      

  8.   

    可以自己写代码:
        temp:=0;
        case i of 
         '1' : temp:=temp+'0001'
         '2' : temp:=temp+'0010'
          ........
         'f' : temp:=temp+'1111'
      end case 
        ........