具体如下:C4 E3 B5 C4 BB B0 CC E2 B2 C4 这是我在另一个串口发过来的信息的内容。
 都是十六进制的 
我想在我接收的这边的memo1里显示出来,
 怎么转换一下 
 

解决方案 »

  1.   

    function HexToString(Buf: PChar; Size: Integer): string; overload;
    const
      Tables: PChar = '0123456789ABCDEF';
    var
      P: PChar;
      V, R: Byte;
      I: Integer;
    begin
      Result := StringOfChar(#0, Size * 2);
      P := Pointer(Result);
      for I := 0 to Size - 1 do
      begin
        V := Ord(Buf[I]);
        R := V div 16;
        P[1] := Tables[V - (R * 16)];
        P[0] := Tables[R];
        Inc(P, 2);
      end;
    end;function HexToString(const S: string): string; overload;
    begin
      Result := HexToString(PChar(S), Length(S));
    end;
      

  2.   


      function StringToHex(P: PChar; Size: Integer): string;
      
        function CharToByte(V: Char): Byte;
        begin
          case V of
            'a'..'f':
              Result := Ord(V) - Ord('a') + 10;
            'A'..'F':
              Result := Ord(V) - Ord('A') + 10;
          else
            Result := Ord(V) - Ord('0');
          end;
        end;  var
        R: PByte;
        I, Len: Integer;
      begin
        Len := Size div 2;
        Result := StringOfChar(#0, Len);
        R := PByte(Result);
        for I := 1 to Len do
        begin
          R^ := CharToByte(P[0]) * 16 + CharToByte(P[1]);
          Inc(R);
          Inc(P, 2);
        end;
      end;
      

  3.   

    你是想把每个字节的内容显示成ASCII字符?
    这就当是很简单的啊。
    var 
      ReceBuffer:array of byte;//接收缓冲区
      indx:integer;
      tempstr:string;
    begin
      tempstr:='';
      for indx:=low(ReceBuffer) to high(ReceBuffer) do
       tempstr:=tempstr+char(ReceBuffer[indx]);
      showmessage(tempstr);
      //memo.lines.add(tempstr);
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: byte;
    begin
      i:=$A3;
      showmessage(Format('%x',[i]));
    end;
      

  5.   

    string get(pchar data, int len)
    {
      for I := 0 to len - 1 do
        result := Result + format("%x", data[I]);
    }
      

  6.   

    不是啊
    我可能没表达清楚  
    C4 E3 B5 C4 BB B0 CC E2 B2 C4 这是我在另一个串口发过来的信息的内容(都是十六进制的)。
    我这边 我用了一个控件mscomm  初始化和oncomm事件都写好了  
    我想把另一个串口传过来的十六进制的信息 显示在我这边的memo1里
    显示出来的形式 还是C4 E3 B5 C4 BB B0 CC E2 B2 C4   这样的    现在在 从另一个串口发正常的汉字和十进制的数字 我这边都能在memo1里显示!!
     就是发十六进制的 我这边不能显示
    代码:
    procedure TForm1.MSComm1Comm(Sender: TObject);
    var
    s:string;begin   if MSComm1.CommEvent = comEvReceive then
       begin
          s := MSComm1.Input;   end;
           Memo1.Lines.Add(s);
    end;现在的问题我想应该是怎么把s处理一下呢(个人意见)
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var s,r :String;
        i,c :integer;
    begin
      s :=Edit1.Text;
      r :='';
      c :=Length(s);
      for I := 1 to c do
      Begin
        if i=c then
         r :=r+ IntToHex(Ord(s[i]),2)
        ELSE
         r :=r+ IntToHex(Ord(s[i]),2)+' ';
      End;
      Edit2.Text :=r;end;
      

  8.   

    555555555555555555 跟调试串口的软件一样,点上hex发送,我这边点上hex显示  就能 
    他发    OA BC OB DC CA    我这边的显示OA BC OB DC CA
    要是不点上hex显示 就显示他们的asc码值了
      

  9.   

    procedure TForm1.MSComm1Comm(Sender: TObject);
    var
    v:variant;
    s:string;
    tempstr:string;
    i:integer;
    begin   if MSComm1.CommEvent = comEvReceive then
       begin
          
          v := MSComm1.Input;
          s:=v;
          tempstr:='';
          for i:=1 to length(s) do
            tempstr:=tempstr+inttohex(byte(s[i]),2)+' ';
          Memo1.Lines.Add(s);
       end;
           
    end;