从D7升级到D2010后,在D2010版本上加入D7同样Spcomm控件,运行时按照提示将Char换成AnsiChar。用串口监控软件监测到的十六进制代码为发送的一半,且每个代码后都多出一个‘00’。
如发送:      3A 00 08 00 03 03 06 0D 17 EF 01 FE FE FF 
接收代码变为:3A 00 00 00 08 00 00 00 03 00 03 00 06 00
如果发送时将发送长度X2,
结果为:3A 00 00 00 08 00 00 00 03 00 03 00 06 00 0D 00 17 00 EF 00 01 00 FE 00 FE 00 FF 00
以上是没有将String转换为Ansistring 如果把String转换为Ansistring
如发送:      3A 00 08 00 03 03 06 0D 17 EF 01 FE FE FF 
接收代码变为:3A 00 08 00 03 03 06 0D 17 3F 01 3F 3F 3F  
              (经我测试过所有大于7F的数据都会变为3F)但是在D7内运行就没有这样的问题。
请问各位大虾解决这个问题

解决方案 »

  1.   

    补充:发送的十六进制码需要经过下面转换函数的。
    function HexStrToStr(const S:String):String;
    //16进制字符串转换成字符串
    var
      t:Integer;
      ts:String;
      M,Code:Integer;
    begin
      t:=1;
      Result:='';
      while t<=Length(S) do
      begin
        while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
          inc(t);
        if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
          ts:='$'+S[t]
        else
          ts:='$'+S[t]+S[t+1];
        Val(ts,M,Code);
        if Code=0 then
          Result:=Result+Chr(M);
        inc(t,2);    
      end;
     end;
    发送
    procedure TForm_Com.SendString(const str: string);     //发送数据
    begin
          Comm1.WriteCommData(PAnsichar(str),Length(str));  
                                                           //结果为多00的
          Comm1.WriteCommData(PAnsichar(Ansistring(str)),Length(str)); 
                                                      //结果为超7F的就会变成3F
    end;