procedure SendHex(S: String);
var
s2:string;
buf1:array[0..50000] of char;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
    if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
        or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
    begin
        s2:=s2+copy(s,i,1);
    end;
end;
for i:=0 to (length(s2) div 2-1) do
    buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));            //请解释这两句??????
    frmInfoMonitor.Comm.WriteCommData(buf1,(length(s2) div 2));//
end;
这是一个用SPCOMM发送十六进制数据的过程,其中 “buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2))); ”这句中的S2字符串中COpy函数取两位又在前面连了一个‘$’符号,然后经过StrToInt函数转化为“十进制整数”,这个“十进制整数”是把“十六进制”转换为“十进制”吗?这里 
而转换成十进制之后 ,又用了一个Char(),这个Char()是什么函数?干什么用的?
而COMM组件的WriteCommData方法(声明是:WriteCommData(PDataToWrite:Pchar,dwSizeofDataToWrite:Words);)这里是把字符数组buf1传给了Pchar类型的参数,这个PChar是什么类型,可以和字符型数组兼容吗??
我还遇到过PAnsiChar()PChar()这个又是什么函数??
请高手指教!!我感觉Delphi中的字符串处理函数有点乱!

解决方案 »

  1.   

    strtoint('$'+copy(s2,i*2+1,2))是把可视的十六进制的转换成十进制
    char是把十进制的数转换成计算机中的字符
      

  2.   

    你可以看看万一的dephi博客
    http://www.cnblogs.com/del/archive/2008/03/03/1088958.html
      

  3.   

    十进制转换十六进制是用IntToHex 
    那十六进制转成十进制呢?
      

  4.   

    两种,一种是如:strtoint('$EB')
    另一种是ord(),其中的参数类型就是char类型的
      

  5.   

    串口读取中,数据一般是保存到buf:array[1.1024] of char中,这是不可视,需要通过inttohex(ord(buf[j]),2)转换成可视的字符
      

  6.   

    ord()函数的参数不是“有序类型”吗?不一定是要Char吧?
    如果是Char类型的参数,会返回ASCII码
    而如果Byte 例如 参数为i:=1 那么Ord(i)返回1
    我在程序中试过了
    inttohex(ord(buf[j]),2)你的这个式子,buf[j]为Char类型,Ord(buf[j])岂不是变成ASCII码?
    IntToHex(ord(buf[j],2)岂不是把ASCII码化成2位的十六进制数?