向串口发送数据问题

7年 2012-12-12 10:26:37
协议如下:
1 报文头 2 固定值:0xAA2F
2 报文长度 4 HEX,包含头与校验字节
3 报文类型 1 固定值:0x02
4 白名单版本号 4 BCD
5 白名单总数 2 HEX
6 卡号1 10 HEX
7 卡类型1 1 HEX 1:M1 2:电信卡 3:ID卡
8 人员姓名1 8 GB2312汉字(4个汉字)
9 部门1 10 GB2312汉字(5个汉字)
10 身份序号1 1 HEX(身份标号)
11 余额1 3 HEX(前两字节表示整数,第三字节表示小数)
N ACC校验字 2 HEX

现在我有个长度为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
...全文
158 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
7年 2012-12-13
  • 打赏
  • 举报
回复
sleep下就好了,得等待串口往回发送数据。
ZyxIp 2012-12-12
  • 打赏
  • 举报
回复
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;
7年 2012-12-12
  • 打赏
  • 举报
回复
用了笨方法,将字符串2位2位取10进制。再发送。 第2个问题有遇到过的没?
7年 2012-12-12
  • 打赏
  • 举报
回复
数组定义不能变,因为还要兼容别的卡。。。
看那山瞧那水 2012-12-12
  • 打赏
  • 举报
回复
"现在我有个长度为16位的电信卡卡号字符串(0863030600686719)"----这个定义个ASCII码数组,长度16; "在串口通信调试的时候可以接收到回应报文,而程序运行时,就接收不到了。"---可能是你设置好设备的响应时间,上位机发个命令的时候,要等下位设置的响应,调整下这个时间
7年 2012-12-12
  • 打赏
  • 举报
回复
还有个问题是:在串口通信调试的时候可以接收到回应报文,而程序运行时,就接收不到了。这是什么问题呢?
该用户很帅 2012-12-12
  • 打赏
  • 举报
回复
肯定是你校验位什么的哪里不一样,一个个调试看看
7年 2012-12-12
  • 打赏
  • 举报
回复
我在设置断点的时候读取串口给我发送的数据个数与直接运行的不一样。。。。各位大大,谁知道咋回事?
bdmh 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 zzflover 的回复:
用了笨方法,将字符串2位2位取10进制。再发送。
这个不笨

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧