如何将这个字符串(zl)转换为字节发送出去?代码:
var
i:integer;
zl:string;
sbuf:array[1..28] of char;begin
zl:='FA0B00090800111100110011000A';
for i:=0 to Length(zl)-1 do
 sbuf[i]:=zl[i]; for i:=0 to length(pchar(@sbuf[i]))-1 do
   begin
     if not form1.Comm1.WriteCommData(pchar(@sbuf[i]),28) then
     begin
     sleep(1);
     end;
   end;
end;
这样行吗?

解决方案 »

  1.   

    如果这样发送就ok!!
    var 
    i:integer; 
    zl:string; 
    sbuf:array[1..28] of char; begin
    sbuf[1]:=$FA;
    sbuf[2]:=$0B;
    sbuf[3]:=$00;
    sbuf[4]:=$09;
    sbuf[5]:=$08;
    sbuf[6]:=$00;
    sbuf[7]:=$11;
    sbuf[8]:=$11;
    sbuf[9]:=$00;
    sbuf[10]:=$11;
    sbuf[11]:=$00;
    sbuf[12]:=$11;
    sbuf[13]:=$00;
    sbuf[14]:=$0A;for i:=0 to length(pchar(@sbuf[i]))-1 do 
      begin 
        if not form1.Comm1.WriteCommData(pchar(@sbuf[i]),14) then 
        begin 
        sleep(1); 
        end; 
      end; 
    end;但是zl在这里是个变量,如何实现将这个字符串转换为字节呢?解决结贴! 
      

  2.   

    var 
      i:integer; 
      zl:string; 
      sbuf:array[0..27] of char; begin 
      zl:='FA0B00090800111100110011000A'; 
      for i:=0 to Length(zl)-1 do 
        sbuf[i]:=zl[i+1];   if not form1.Comm1.WriteCommData(pchar(@sbuf[i]),28) then 
      begin 
        //发送失败
      end; 
    nd; 
      

  3.   

    或者var 
      i:integer; 
      zl:string; 
      sbuf:array of char; begin 
      zl:='FA0B00090800111100110011000A';
      setlength(sbuf,length(zl)); 
      for i:=0 to Length(zl)-1 do
      begin 
        sbuf[i]:=zl[i]; 
        if not form1.Comm1.WriteCommData(sbuf[i],1) then 
        begin 
          sleep(1); 
        end; 
      end; 
    end; 
      

  4.   

    纠正一下
    form1.Comm1.WriteCommData(@sbuf[i],1) 
      

  5.   

    这个方法试验过来,不行
    关键要将这个sbuf[i]变成"FA,0B,00,09,08,00,11,11,00,11,00,11,00,0A"发送出去。
      

  6.   

    var 
      sBuf: array[0..13] of Byte;
      strBuf: string;
      I: Integer;
    begin
      strBuf := 'FA0B00090800111100110011000A'; 
      for I := 0 to 13 do
        sBuf[I] := StrToInt('$' + strBuf[2*I + 1] + strBuf[2*I + 2]);
      form1.Comm1.WriteCommData(pchar(@sBuf[0]),14);
    end;
      

  7.   

    这样改一下就可以了var 
      i:integer; 
      zl:string; 
      sbuf:array of byte; begin 
      zl:='FA0B00090800111100110011000A'; 
      setlength(sbuf,length(zl) div 2 ); 
      for i:=0 to (length(zl) div 2) do
        sbuf[i]:=strtoint('$'+zl[2*i]+zl[2*i+1]);
      

  8.   

    for i:=0 to (length(zl) div 2)-1 do 
      

  9.   

    这样改一下就可以了 var 
      i:integer; 
      zl:string; 
      sbuf:array of byte; begin 
      zl:='FA0B00090800111100110011000A'; 
      setlength(sbuf,length(zl) div 2 ); 
      for i:=0 to (length(zl) div 2) do 
        sbuf[i]:=strtoint('$'+zl[2*i+1]+zl[2*i+2]
      

  10.   

    这样改一下就可以了 var 
      i:integer; 
      zl:string; 
      sbuf:array of byte; begin 
      zl:='FA0B00090800111100110011000A'; 
      setlength(sbuf,length(zl) div 2 ); 
      for i:=0 to (length(zl) div 2) do 
        sbuf[i]:=strtoint('$'+zl[2*i+1]+zl[2*i+2]这样不行!编译都通不过,提示错误有争议的类型!
      

  11.   

    没有问题啊zl:='FA0B00090800111100110011000A';
      setlength(sbuf,length(zl) div 2 );
      for i:=0 to (length(zl) div 2) do
        sbuf[i]:=strtoint('$'+zl[2*i+1]+zl[2*i+2]);
      

  12.   

    zl:='FA0B00090800111100110011000A'; 
      setlength(sbuf,length(zl) div 2 ); 
      //for i:=0 to (length(zl) div 2) do 改成:
      for i:=0 to (length(zl) div 2) - 1 do 
        sbuf[i]:=strtoint('$'+zl[2*i+1]+zl[2*i+2]);
        sbuf[i]:=strtoint('$'+zl[2*i+1]+zl[2*i+2]);
      

  13.   

    setlength(sbuf,length(zl) div 2 ); 通不过啊!
    如果
    var
    sbuf:array [1..14] of byte;
    begin
    setlength(sbuf,length(zl) div 2 ); 
    end;
    编译时提示不匹配的类型;如果
    var
    sbuf:array [1..14] of char;
    begin
    setlength(sbuf,length(zl) div 2 ); 
    end;
    编译时Constant object cannot be passed as var parameter错误!
      

  14.   

    sbuf:array [1..14] of byte; 
    这是静态数组的定义.
    静态数组是不能用setlength的.sbuf: array of byte;  //动态数组