Seamour ,你的方法不错,我测试了一下,但是没有得到想要的结果,不知是哪里的问题,帮忙看看 var p:PByte; i:PInteger; begin p:=pbyte(pchar('dddddd')); i := PInteger(Integer(p)-4); showmessage(inttostr(i^)); end;
你为什么认为'dddddd'是个“动态数组”?const dd : string = 'dddddd'; var p : PByte; p := PByte(dd);不过这个dd也不是动态数组长度,而是string的strLen
楼主的题目无解。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')); 并不是一个动态数组,而是一个静态数组,这个字符串在编译期,就已经分配好内存及其内容了。
从写程序的角度来看,你应该知道自己在干嘛,不该出现“未知”的情况
Seamour ,你的方法不错,我测试了一下,但是没有得到想要的结果,不知是哪里的问题,帮忙看看 var
p:PByte;
i:PInteger;
begin
p:=pbyte(pchar('dddddd'));
i := PInteger(Integer(p)-4);
showmessage(inttostr(i^));
end;
var p : PByte;
p := PByte(dd);不过这个dd也不是动态数组长度,而是string的strLen
比如:
长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')); 并不是一个动态数组,而是一个静态数组,这个字符串在编译期,就已经分配好内存及其内容了。