协议如下:
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

解决方案 »

  1.   

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

  2.   

    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;
      

  3.   

    sleep下就好了,得等待串口往回发送数据。