一个字符串
a := '31 32 33 34 35 A1 A2 A3 FF'我现在要把他转换成一个BYTE的动态数组var
  sss:array of byte;首先设置这个动态数组大小setlength(sss,(length(a)+1) div 3) 
//这个就是看字符串a的长度,然后+1,整除3,就等于有多少个byte了,这个a有9个byte;接下来就是给这个动态数组赋值,我想呢,就是 sss[0] := 31;  
            sss[1] := 32;
            sss[2] := 33;
            sss[3] := 34;
            sss[4] := 35;
            sss[5] := A1;
            sss[6] := A2;
            sss[7] := A3;
            sss[8] := FF;
            //我要的就是这个效果,看我下面的代码看我的代码  for i:=0 to ((length(a)+1) div 3)-1 do
  begin
    sss[i] := strtoint('$'+a[i*3+1]+a[i*3+2])
  end;这样就完成了给动态数组赋值,由于a的值不是很大,所以感觉不出来卡,如果上千个byte,那肯定会变慢求解,有什么更快的方法?

解决方案 »

  1.   


    var
      a := '31 32 33 34 35 A1 A2 A3 FF';
      sss:array of byte;
      sl: TStringList;
      i: integer;
    begin
      sl:=TStringList.create;
      try
        sl.commaText:=a;
        setlength(sss,sl.count);
        for i:= 0  to sl.count-1 do
          sss[i] := strtoint('$'+sl(i));
      finally
        sl.free;
        //setlength(sss,0);
      end;
    end;
      

  2.   

    2位16进制转换,使用strtoint好像太奢侈了sss[i] := strtoint('$'+a[i*3+1]+a[i*3+2])改为:if a[i*3+1]>='A' then
      sss[i] := ord(a[i*3+1])-ord('A')+10
    else
      sss[i] := ord(a[i*3+1])-ord('0');
    sss[i]:=sss[i]*16;
    if a[i*3+2]>='A' then
      sss[i] := sss[i]+ord(a[i*3+2])-ord('A')+10
    else
      sss[i] := sss[i]+ord(a[i*3+2])-ord('0');