有将asc码转换成16进制码的工具吗?
请看如下数据:
初始化:
COM1【WRITE:0】68 99 99 99 99 99 99 68 05 01 61 CD 16 
COM1【READ:0】68 FF FF FF FF FF FF 68 C5 01 32 C2 16 
COM1【WRITE:0】68 99 99 99 99 99 99 68 03 01 02 6C 16 
COM1【READ:0】68 FF FF FF FF FF FF 68 C3 01 31 BF 16 其中第一行的:68 99 99 99 99 99 99 68 05 01 61 CD 16
这是asc码还是其它什么码?
如何将这个转换成16进制的呀?
先谢了。

解决方案 »

  1.   

    68 99 99 99 99 99 99 68 05 01 61 CD 16 这是十六进制字符串StrToIntDef('$' + '68', 0); // 十六进制换成整数IntToHex($68, 2); // 整数换成十六进制字符串//参考如下代码function HexToStr( //十六进制字符串处理成字符串
      mHex: string //十六进制字符串
    ): string; //返回处理后的字符串
    var
      I: Integer;
    begin
      Result := '';
      mHex := StringReplace(mHex, #32, '', [rfReplaceAll]);
      for I := 1 to Length(mHex) div 2 do
        Result := Result + Chr(StrToIntDef('$' + Copy(mHex, I * 2 - 1, 2), 0));
    end; { HexToStr }function StrToHex( //字符串处理成十六进制字符串
      mStr: string; //字符串
      mSpace: Boolean = False //是否用空格分开
    ): string; //返回处理后的十六进制字符串
    const
      cSpaceStr: array[Boolean] of string = ('', #32);
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(mStr) do
        Result := Format('%s%s%.2x', [Result, cSpaceStr[mSpace], Ord(mStr[I])]);
      if mSpace then Delete(Result, 1, 1);
    end; { StrToHex }
      

  2.   

    谢谢楼上,第一行的确是16进制的,我现在主要是想让电脑程序发送这个68 99 99 99 99 99 99 68 05 01 61 CD 16
    16进制的指令给读卡器,两位16进制数表示一个字节,如68表示一个字节,99表示一个字节。
    要让电脑知道这个69,99等是16进制数.我在delphi中用的是spcomm控件,相关代码如下:procedure TFCOMM.Button1Click(Sender: TObject);
    var
       sinit:string;
    begin
    sinit:='68 99 99 99 99 99 99 68 05 01 61 CD 16';
    //sinit:=StrToHex('6899999999999968050161CD16');
    if spComm1.WriteCommData(Pchar(sinit),Length(sinit)) then
       showmessage('初始化卡的指令已经发送!')
    else
       messagedlg('初始化卡的指令发送失败!',mterror,[mbyes],0);
    end;应该如何处理呀?
    谢各位大虾。
      

  3.   

    刚才又试了zswang(伴水清清)(专家门诊清洁工) 的function HexToStr
    好像电脑已经识别是16进制的了。procedure TFCOMM.Button1Click(Sender: TObject);
    var
       sinit:string;
    begin
    //sinit:='68 99 99 99 99 99 99 68 05 01 61 CD 16';
    //sinit:=StrToHex('6899999999999968050161CD16');sinit:=HexToStr('6899999999999968050161CD16');
    if Comm1.WriteCommData(Pchar(sinit),Length(sinit)) then
       showmessage('初始化卡的指令已经发送!')
    else
       messagedlg('初始化卡的指令发送失败!',mterror,[mbyes],0);
    end;我还要继续测试
      

  4.   

    还有个问题,我在上述语句后加上句:sleep(2);
    目的是想让程序延时2秒后再发送另一条指令,但现在sleep(2);这一行编绎通不过呀。
    提示说:
    [Error] COMM.pas(140): Declaration expected but identifier 'sleep' found
    [Fatal Error] COMMPRO.dpr(5): Could not compile used unit 'COMM.pas'这是什么原因呀?
    谢谢。
      

  5.   

    Sleep是API函数,需要引用Windows或SysUtils单元
      

  6.   

    sleep(2000); //毫秒为单位,2000毫秒才是2秒
      

  7.   

    伴水清清,你好,还有个问题请教你。
    现在我想判断用户的读卡器设备与电脑有没有连接好,我是想如果返回的字符串为空的话,就提示用户说:”读卡器与电脑没有正确连接,请检查!“
    代码如下:
    procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
      var  s:string;
    begin
          SetLength(S,BufferLength);   //接收RS232的数据并显示Memo1上。
          Move(Buffer^,PChar(S)^,BufferLength);
          Memo1.Lines.Add(StrToHex(S));
          Memo1.Invalidate;
          if  StrToHex(S)='68 FF FF FF FF FF FF 68 C5 01 62 F2 16' then
              showmessage('初始化卡的操作成功!');
          if  length(StrToHex(S))=0 then
              messagedlg('读卡器与电脑没有正确连接,请检查!',mterror,[mbyes],0);
    end;
    这种情况是程序收不到任何的信息,应该是空字符串吧?
    发现用if  length(StrToHex(S))=0 then 捕捉不到这个错误,请问应如何处理?谢谢。
      

  8.   

    上面的问题有误,现在的问题是这样的,我是用spconn控件写的,现在如果设备没连好的话,spconn控件的onReceiveData事件也不会触发,所以也就捕捉不到这个错误,请问应如何处理?再次感谢!