比如,将缓存中读出的八位二进制11111111转换成十六进制数FF然后显示在Memo1中,该如何实现~
希望大家能举例说明~

解决方案 »

  1.   

    又见大大真是高兴,因为刚接触串口,还没试验过所以对大大的问题也不是很清楚~
    我要做一个串口通信,PC机接收单片机的信息,通过RS232实现,用的是MSComm控件,现在想将接收缓存中的二进制数转换为十六进制显示在Memo中,
    大大有什么方法没~感谢!
      

  2.   

    function BinString_2_Hex(InStr: String): String;
    var
      subStr: String;
      iLen: Integer;
      P,P1: PChar;
      
    begin
      iLen := Length(InStr);
      SetLength(Result, iLen div 4);
      P :=PChar(InStr);
      P1 := PChar(Result);
      while iLen>0 do begin
        SetString(SubStr,P,4);
        case SubStr of
          '0000':
             P1^ := '0';
          '0001':
             P1^ := '1';
          '0010':
             P1^ := '2';
          '0011':
             P1^ := '3';
          '0100':
             P1^ := '4';
          '0101':
             P1^ := '5';
          '0110':
             P1^ := '6';
          '0111':
             P1^ := '7';
          '1000':
             P1^ := '8';
          '1001':
             P1^ := '9';
          '1010':
             P1^ := 'A';
          '1011':
             P1^ := 'B';
          '1100':
             P1^ := 'C';
          '1101':
             P1^ := 'D';
          '1110':
             P1^ := 'E';
          '1111':
             P1^ := 'F';
        end; 
        Inc(P,4);
        Inc(P1);
        Dec(iLen,4)
      end;
    end;
      

  3.   

    那个二进制不是1111这样的字符。
    一个个字节使用IntToHex转换即可
      

  4.   

    那缓存中的二进制该用什么,用BinToHex吗?
      

  5.   

    对了,刚才用下面的代码试验了下
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      IntToHex(11111111,i);
      ShowMessage(IntToStr(i));
    end;
    发现ShowMessage出来的值怎么会变来变去的,而且不是十六进制数,只是一些8位的整数
      

  6.   

    缓存中的二进制,实际上就是Buffer,内存流,你当成使用PByte指向它一个个取出Byte,就可以使用IntToHex.
    BinToHex也可以完成,或者说更好。
      

  7.   

    对了,刚才用下面的代码试验了下
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      IntToHex(11111111,i);
      ShowMessage(IntToStr(i));
    end;
    发现ShowMessage出来的值怎么会变来变去的,而且不是十六进制数,只是一些8位的整数
      

  8.   

    大大有BinToHex读取Buffer方面的例子吗?我用的时候老提示出错,很郁闷
      

  9.   

    你这个11111111不是二进制数据,而是一人十进制数据,它所对应的二进制内容是101010011000101011000111,而对应的十六进制是A98AC7,IntToHex转换之后返回值是String;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      str: String;
    begin
      str:=IntToHex(11111111,6);
      ShowMessage(str);
    end;
      

  10.   

    a:=15;
    IntToHex(a,2) -> 0F
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      i:integer; 
      str: String; 
    begin 
      i:= 11111111;
      SetLength(str, sizeof(i) * 2);//一个字节会变成两个十六进制字符
      BinToHex(PChar(@I),PChar(str),sizeof(i));
      ShowMessage(str);
    end; 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      src: PChar; 
      str: String; 
    begin 
      src := '11111111';
      SetLength(str, strlen(src) * 2);//一个字节会变成两个十六进制字符
      BinToHex(src,PChar(str),strlen(src));
      ShowMessage(str);
    end; procedure TForm1.Button1Click(Sender: TObject); 
    var 
      src: String; 
      str: String; 
    begin 
      src := '11111111';
      SetLength(str, length(src) * 2);//一个字节会变成两个十六进制字符
      BinToHex(PChar(src),PChar(str),length(src));
      ShowMessage(str);
    end;