我在一个串口上接收了一些数,是16进制的
接收的类型是OleVariant,我用STRING可以接得上
但是解析不了16进制
请问如何接收数据并解析成16进制啊?

解决方案 »

  1.   

    转换成string之后,然后在 PByte(s)得到字节指针,然后在逐个逐个转换辣
      

  2.   

    给你两个
    function StreamToVariant(Stream: TStream): OleVariant;
    var
      p: Pointer;
    begin
      Result := VarArrayCreate([0, Stream.Size - 1], varByte);
      p := VarArrayLock(Result);
      try
        Stream.Position := 0;
        Stream.Read(p^, Stream.Size);
      finally
        VarArrayUnlock(Result);
      end;
    end;
    procedure VariantToStream(const Data: OleVariant; Stream: TStream);
    var
      p: Pointer;
    begin
      p := VarArrayLock(Data);
      try
        Stream.Write(p^, VarArrayHighBound(Data,1) + 1);
      finally
        VarArrayUnlock(Data);
      end;
    end;
      

  3.   

    var
    in:OleVariant
    ar;array of byte
    str;string;
    begin
      in:=mscomm1.input;
      setlength(ar,mscomm1.inbuffercount)
      ar:=in;
      for I:=0 to inbuffercount-1 do
        str:=str+IntToHex(ar[i],2);  showMessage(str);end;
      

  4.   

    var
            comin:OleVariant;
            ar:array of byte;
            str:String;
            i: Integer;
    begin
            comin := MSComm1.Input;
            System.SetLength(ar,MSComm1.InBufferCount);
            ar := comin;
            for I:=1 to MSComm1.InBufferCount do
            begin
                    str := str + IntToHex(ar[i-1],2);
            end;        ShowMessage(str);
    end;
    这样不行!!!!!!!在 ar := comin ; 那里出错!!!
      

  5.   


            //comin := MSComm1.Input;取过以后inbuffercount为0了将这句放至后在
            SetLength(ar,MSComm1.InBufferCount);
            comin := MSComm1.Input;//这个地方
            
            ar := comin;
            for I:=1 to MSComm1.InBufferCount do
            begin
                    str := str + IntToHex(ar[i-1],2);
            end;        ShowMessage(str);
      

  6.   

    var
            comin:Variant;
            ar:array of byte;
            str:String;
            i,b: Integer;
    begin
            MSComm1.InputMode := 1;
            b := MSComm1.InBufferCount; 
            comin := MSComm1.Input;
            System.SetLength(ar,b);
            ar := comin;
            for I:=1 to b do
            begin
                    str := str + IntToHex(ar[i-1],2);
            end;        ShowMessage(str);
    end;