procedure Tfm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word); 
var
h:integer;
avgcount:string;
ipos:integer;  
begin
  move(buffer^,pchar(@rbuf)^,bufferlength);
   for j:=1 to bufferlength do
   //将字节从数组中取出来转换为16进制字符串
   viewstr:=viewstr+inttohex(ord(rbuf[j]),2);
   ssstr:=copy(viewstr,13,2);
   rec:=strtoint('$'+ssstr);
case rec of
62:
ipos:=0;
for h:=0 to 8 do
       begin
       *****//从数组中取出字节(关键是这步不通!!!) ******
       avgcount:=copy(pchar(@rbuf[j]),ipos+1,4);
       end;
end;或者
procedure Tfm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word); 
var
h:integer;
ipos:integer;  
avgcont:string;
begin
  move(buffer^,pchar(@rbuf)^,bufferlength);
   for j:=1 to bufferlength do
   //将字节从数组中取出来转换为16进制字符串
   viewstr:=viewstr+inttohex(ord(rbuf[j]),2);
   ssstr:=copy(viewstr,13,2);
   rec:=strtoint('$'+ssstr);
case rec of
62:
ipos:=0;
for h:=0 to 8 do
       begin
       //从数组中取出字节(关键是这步不通!!!) 
       avgcount:=copy(viewstr,2*ipos+1,8);
       end;
end;

解决方案 »

  1.   

    copy函数可能不支持16进制串,
      

  2.   

    copy函数支持16进制串,应该是其他原因
      

  3.   

    是不是只能取出字符串啊?那我就用下面的对吧??
    或者
    procedure Tfm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word); 
    var
    h:integer;
    ipos:integer;  
    avgcont:string;
    begin
      move(buffer^,pchar(@rbuf)^,bufferlength);
       for j:=1 to bufferlength do
       //将字节从数组中取出来转换为16进制字符串
       viewstr:=viewstr+inttohex(ord(rbuf[j]),2);
       ssstr:=copy(viewstr,13,2);
       rec:=strtoint('$'+ssstr);
    case rec of
    62:
    ipos:=0;
    for h:=0 to 8 do
           begin
           //从数组中取出字节(关键是这步不通!!!) 
           avgcount:=copy(viewstr,2*ipos+1,8);
           end;
    end;