var
Comm1: array[0..31] of BYTE;
b,v:byte;
i:integer;
s,s1:string;
sendstr:string;
begin
MSComm1.CommPort := 1;
MSComm1.InBufferSize := 30000;
If MSComm1.PortOpen = False Then MSComm1.PortOpen := True; Comm1[0] := 12; //'要操作的块号
Comm1[1] :=$60; // '密码类型 &H60:keyA &H61:keyB
Comm1[2] := 3; // '命令类型 1:取IC卡号;2:读卡;3:写卡;
Comm1[3] := $FF; //'密码
Comm1[4] := $FF ;
Comm1[5] := $FF;
Comm1[6] := $FF;
Comm1[7] := $FF;
Comm1[8] := $FF; // '密码结束
Comm1[9] := Comm1[0] Xor Comm1[1] Xor Comm1[2] Xor Comm1[3] Xor Comm1[4] Xor Comm1[5] Xor Comm1[6] Xor Comm1[7] Xor Comm1[8];
Comm1[10] := $01 ; //'卡数据
Comm1[11] := $02 ;
Comm1[12] := $03 ;
Comm1[13] := $04 ;
Comm1[14] := $05 ;
Comm1[15] := $0 ;
Comm1[16] := $0 ;
Comm1[17] := $0 ;
Comm1[18] := $0 ;
Comm1[19] := $0 ;
Comm1[20] := $0 ;
Comm1[21] := $0 ;
Comm1[22] := $0 ;
Comm1[23] := $0 ;
Comm1[24] := $0 ;
Comm1[25] := $0 ;// '卡数据结束
Comm1[26] := $A2; //'IC卡号
Comm1[27] := $E8 ;
Comm1[28] := $98 ;
Comm1[29] := $A8 ; //'IC卡号结束
v := Comm1[0];
For i := 1 To 29 do
v := v + Comm1[i]; Comm1[30] := v Mod 256 ;//'和校验
b := Comm1[0] ;
For i := 1 To 30 do
b := b Xor Comm1[i] ; Comm1[31] := b ; // '异或校验
for i:=0 to 31 do
begin
s:=s+intToStr(comm1[i]);
end; MSComm1.Output:=s; // '发送命令
MSComm1.PortOpen := false;我的问题是: MSComm1.Output:=s; 这行和前面的几行的FOR 那里应该怎么写啊??? 谢谢了.
Comm1: array[0..31] of BYTE;
b,v:byte;
i:integer;
s,s1:string;
sendstr:string;
begin
MSComm1.CommPort := 1;
MSComm1.InBufferSize := 30000;
If MSComm1.PortOpen = False Then MSComm1.PortOpen := True; Comm1[0] := 12; //'要操作的块号
Comm1[1] :=$60; // '密码类型 &H60:keyA &H61:keyB
Comm1[2] := 3; // '命令类型 1:取IC卡号;2:读卡;3:写卡;
Comm1[3] := $FF; //'密码
Comm1[4] := $FF ;
Comm1[5] := $FF;
Comm1[6] := $FF;
Comm1[7] := $FF;
Comm1[8] := $FF; // '密码结束
Comm1[9] := Comm1[0] Xor Comm1[1] Xor Comm1[2] Xor Comm1[3] Xor Comm1[4] Xor Comm1[5] Xor Comm1[6] Xor Comm1[7] Xor Comm1[8];
Comm1[10] := $01 ; //'卡数据
Comm1[11] := $02 ;
Comm1[12] := $03 ;
Comm1[13] := $04 ;
Comm1[14] := $05 ;
Comm1[15] := $0 ;
Comm1[16] := $0 ;
Comm1[17] := $0 ;
Comm1[18] := $0 ;
Comm1[19] := $0 ;
Comm1[20] := $0 ;
Comm1[21] := $0 ;
Comm1[22] := $0 ;
Comm1[23] := $0 ;
Comm1[24] := $0 ;
Comm1[25] := $0 ;// '卡数据结束
Comm1[26] := $A2; //'IC卡号
Comm1[27] := $E8 ;
Comm1[28] := $98 ;
Comm1[29] := $A8 ; //'IC卡号结束
v := Comm1[0];
For i := 1 To 29 do
v := v + Comm1[i]; Comm1[30] := v Mod 256 ;//'和校验
b := Comm1[0] ;
For i := 1 To 30 do
b := b Xor Comm1[i] ; Comm1[31] := b ; // '异或校验
for i:=0 to 31 do
begin
s:=s+intToStr(comm1[i]);
end; MSComm1.Output:=s; // '发送命令
MSComm1.PortOpen := false;我的问题是: MSComm1.Output:=s; 这行和前面的几行的FOR 那里应该怎么写啊??? 谢谢了.
解决方案 »
- 求助 关于indy组件 tidftp的用法
- 请问专家: DELPHI2007 中,有什么办法可以获取远程服务器的硬件信息,比如硬盘序列号,主板序列号或者CPU序列号等等.
- 请教ClientDataSet排序问题, 如何对部分行排序
- 解决100送上,来者有分:关于关闭窗口问题
- *******如何将一个Tstringlist的内容截取一部分,写到另一个Tstringlist中去? 急,在线等!!***
- 字符串问题
- 发扑克牌怎么写程序?谢谢 ,急!!!!!等半个小时 谢谢
- 请教最简便的方法,向数据库中insert记录!!!!万分感激!!!
- 哪里可以找到这样的“精华”
- 用EHLIB控件,在DBGRIDEH中添加一条记录,如果不点击别的地方,下面的合计值,没有改变。
- delphi问题!感谢!
- 怎么遍历文件夹下所有文件 包括子文件夹下的文件
begin
s:=s+intToStr(comm1[i]);
end;
----是这里?setLength(s,32);
CopyMemory(@s[1],Comm1,32);
MSComm1.Output:=s;
var
pBuf : PChar
sTmp : string;
begin
sTmp := '';
pBuf := AllocMem(32);
for i:=0 to 31 do
begin
pBuf[i] := Char(Comm1[i]);
sTmp := sTmp + format('%2.2x ',[Comm1[i]]); //直接显示16进制数据
end;
MSComm1.Output:=pBuf;
freemem(pBuf);
end;