读书人

向串口发送数据有关问题

发布时间: 2013-01-08 14:02:14 作者: rapoo

向串口发送数据问题
协议如下:
1报文头2固定值:0xAA2F
2报文长度4HEX,包含头与校验字节
3报文类型1固定值:0x02
4白名单版本号4BCD
5白名单总数2HEX
6卡号110HEX
7卡类型1 1HEX 1:M1 2:电信卡 3:ID卡
8人员姓名18GB2312汉字(4个汉字)
9部门110GB2312汉字(5个汉字)
10身份序号11HEX(身份标号)
11余额13HEX(前两字节表示整数,第三字节表示小数)
NACC校验字2HEX

现在我有个长度为16位的电信卡卡号字符串(0863030600686719),需要发送到串口的数00 00 08 63 03 06 00 68 67 19


卡号我定义为10位的byte数组.
请问,该怎么转换?
我用挨个赋值给赋值,再发送到串口后,就变成16进制了(00 00 08 3F 03 06 00 44 43 13)。。。。

正确发送到串口的数据是00 00 08 63 03 06 00 68 67 19

[解决办法]
"现在我有个长度为16位的电信卡卡号字符串(0863030600686719)"----这个定义个ASCII码数组,长度16;
"在串口通信调试的时候可以接收到回应报文,而程序运行时,就接收不到了。"---可能是你设置好设备的响应时间,上位机发个命令的时候,要等下位设置的响应,调整下这个时间
[解决办法]

var
s:String;
arr:array [0..9] of Byte;
i,j:Integer;
begin
s:='0863030600686719';
i:=1;
j:=0;
ZeroMemory(@arr[0],10);
while i<=Length(s) do
begin
arr[j]:=StrToInt('$'+S[i]+S[i+1]);
i:=i+2;
j:=j+1;
end;

[解决办法]
引用:
用了笨方法,将字符串2位2位取10进制。再发送。

这个不笨
[解决办法]
肯定是你校验位什么的哪里不一样,一个个调试看看

读书人网 >.NET

热点推荐