怎样将一个pByteArray类型的数组的每四位转化成为一位16进制数。并以字符串显示出来。紧急求助。天灵灵,地灵灵,各路神仙快显灵。各路打小虾米们快来帮忙啊。小弟该着急死啦。还有一个要求是速度要快。

解决方案 »

  1.   

    每四位byte对应一个十六进制数啊。
      

  2.   

    var arr :pByteArray; s :string;
    //...
    s :='';  
    for i:= 0 to length(arr)-1 do
      s := s+ inttohex(arr[i],2);result := s;
      

  3.   

    IntToHex(数字,2),其返回为16进制数的字符串
      

  4.   

    可能是我说得比太清楚。是这样的我的这个pByteArray里面包村的除了0就是1,现在我想将每4位[相当于一个二进制数]转化成一个十六进制数,然后再保存到一个字符串中。
    我想找一个快一点的算法。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      arr :pByteArray;
      s :string;
      i,v:integer;
    begin
      GetMem(arr,16);
      for i:=0 to 15 do
        arr[i]:=i;
      s :='';
      for i:= 0 to 3 do
      begin
        Move(arr[i*4],v,4);
        s := s+' '+inttohex(v,4);
      end;
      ShowMessage(s);
      FreeMem(arr);
    end;
      

  6.   

    index := 0;    //指示从数组的第几个数字开始连续取四个(0或1的)数字
    strTmp := '';  //最终的字符串结果
    strLen := Length(array);     //数组的总长度
    while (index + 3)< strLen do //每次能连续取到四个数字则取数否则终止
    {
      iTmp := 0;
      for j:= 0 to 3 do
        iTmp := iTmp * 2 + array[index + j]; //计算每次取得的四个数合并后对应的数值
      strTmp := strTmp + IntToHex(iTmp);
      index := index + 4;
    }
      

  7.   

    function GetString(ByteArray: array of Byte): string;
    var
      index, strLen, iTmp, j: Integer;
      strTmp: string;
    begin
      Result := '';
      index := 0;    //指示从数组的第几个数字开始连续取四个(0或1的)数字
      strTmp := '';  //最终的字符串结果
      strLen := Length(ByteArray); //数组的总长度
      while (index + 3)< strLen do //每次能连续取到四个数字则取数否则终止
      begin
        iTmp := 0;
        for j:= 0 to 3 do
          iTmp := iTmp * 2 + ByteArray[index + j]; //计算每次取得的四个数合并后对应的数值
        strTmp := strTmp + IntToHex(iTmp, 2);
        index := index + 4;
      end;
      Result := strTmp;
    end;procedure TForm1.Button1Click(Sender: TObject);
    const
      ByteArray1: array[1..12] of Byte=(1,1,0,1, 1,0,1,1, 0,1,0,1);
    begin
      ShowMessage(GetString(ByteArray1));
    end;