一个PBYTE变量。所指的是一个未知的字节数组,如何得到这个数组的长度。 

解决方案 »

  1.   

    PByte具体指向的是什么就不好说了,如果能确定是delphi动态数组的首地址的话,可以通过 PInteger(Integer(pByteVar)-4)^ 得到数组长
    从写程序的角度来看,你应该知道自己在干嘛,不该出现“未知”的情况
      

  2.   


    Seamour ,你的方法不错,我测试了一下,但是没有得到想要的结果,不知是哪里的问题,帮忙看看  var   
          p:PByte;
          i:PInteger;
      begin
          p:=pbyte(pchar('dddddd'));
          i := PInteger(Integer(p)-4);
          showmessage(inttostr(i^));
      end;
      

  3.   

    你为什么认为'dddddd'是个“动态数组”?const dd : string = 'dddddd';
    var p : PByte;
      p := PByte(dd);不过这个dd也不是动态数组长度,而是string的strLen
      

  4.   

    楼主的题目无解。DELPHI在动态数组的第一个元素前面会有个长度。
    比如:
    长String类型,第一个元素前面就是指针@Str[1]前四个字节存有长度。
    短String类型,第一个元素前面就是指针@Str[1]前一个字节存有长度。
    DynArray类型,第一个元素前面就是指针@Str[1]前四个字节存有长度。
    如下代码:procedure TForm1.btn1Click(Sender: TObject);
    var
      Bytes: TByteDynArray;
    begin
      SetLength(Bytes, 4);
      ShowMessage(IntToStr(PInteger((Integer(@Bytes[0])- 4))^));
    end;楼上p:=pbyte(pchar('dddddd')); 并不是一个动态数组,而是一个静态数组,这个字符串在编译期,就已经分配好内存及其内容了。
      

  5.   

    楼主的题目有两种可能求得解:楼主的PByte必须指向delphi定义的动态数组的第n个元素,并且这n值已知。楼主的PByte指向字符串,且这个字符串以0结束(Delphi的String字符串中可能有n个0)