有将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进制的呀?
先谢了。
请看如下数据:
初始化:
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进制的呀?
先谢了。
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 }
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;应该如何处理呀?
谢各位大虾。
好像电脑已经识别是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;我还要继续测试
目的是想让程序延时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'这是什么原因呀?
谢谢。
现在我想判断用户的读卡器设备与电脑有没有连接好,我是想如果返回的字符串为空的话,就提示用户说:”读卡器与电脑没有正确连接,请检查!“
代码如下:
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 捕捉不到这个错误,请问应如何处理?谢谢。