如果说我通过COM发送两个汉字:我们
我们=CED2C3C7
我用串口调试助手测试时发现,如果用十六进制显示的话,那么
CED2C3C7 ==23 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 (假如说等这么多),这样一来,那第一个C就等于23 22 而我要的是c=2322,中间没有空格  
一开始,我以为是:result:=result+inttohex(ord(str[i]),2);里,那个2的问题,但我用showmessage看一下,却不是这个原因,请问我哪个高手知道这是什么原因?谢谢!

解决方案 »

  1.   

    ahjoe(强哥)
    你有QQ吗?
    我在在富翁,和CSDN上发帖,只有你一个人回答,太让我伤心! 那一堆23代表如果是汉字'我们'的十六进制
      

  2.   

    我看你也不用伤心。那一堆2322是十六进的,那么CED2C3C7 ==23 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23 这里面的CED2C3C7 又是什么?!
      

  3.   

    CED2C3C7是'我们'的十六进制,23 22 23 23 23 23 23 23 23 23 23 23 23 23 23 23好比是这两个汉字十六进制中每个字节
      

  4.   

    呵~~ 你把下面的代码复制过去,测试一下:var
      S : String;
      P : ^Byte;
      I : integer;
    begin
      S := '我们';
      P := @S[1];
      for I := 0 to Length(S)-1 do
        begin
        memo1.Text := memo1.Text + format('[ %.2x ] ',[P^]);
        inc(P);
        end;
    end;结果是:[ CE ] [ D2 ] [ C3 ] [ C7 ] 注意,每个[]里面就是一个字节!那就是十六进制的形式!
      

  5.   


    SendStr := Chr($10) + Chr($53) + Chr($54) + Chr($00) + Chr($00) + SendStr + Chr($4E) + Chr($41) + Chr($0D) + Chr($0A);       
     Tem := Length(SendStr);
     Comm1.WriteCommData(Pchar(SendStr),Tem);那个'我们'就相当于中间的那个Sendstr好的,谢谢,我试试!
      

  6.   

    好的,谢谢------lihuasoft(学习低调做人)
      

  7.   

    离去上班还有一点时间,我结合这个概念给你说一下:S := '我们';   '我们'这个字串,共占用6个字节。其中,S[0]是字串长度,不可见;然后,'我们'占四个字节,然后,后面还有一个字节是NULL,就是字串结束符。所以,我把P := @S[1];每个字节是8位,如上面的[CE]这个字节,就是[11001110]共8个二进位
                                              ~~~~^^^^
                                                C   E我的例子里,用format函数输出十六进制形式的字串,其中插了空格,如果不想要空格和[],可以删去。