delphi 中的 if PWord(@(Buffer[i]))^=a then ...; 这个判断怎么取的值?
答案:2 悬赏:40 手机版
解决时间 2021-03-19 10:26
- 提问者网友:一抹荒凉废墟
- 2021-03-18 16:48
其中 a:Cardinal; Buffer:array[1..1] of Byte;或Buffer:array[1..$FF] of Byte;
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-03-18 16:57
procedure TForm1.Button6Click(Sender: TObject);
var
a:Cardinal; //Cardinal是无符号32位整数 相当于word
Buffer:array[1..2] of Byte; //声明数组 8位数组
c:Word; //定义一个c为word,方便数据测试用 16位 d:byte; //为了比对结果
begin
a := 10; //对本次测试无意义
Buffer[1] := $0F; //10进制15
Buffer[2] := $01; if PWord(@(Buffer[1]))^=a then
ShowMessage('');
c := Pword(@(Buffer[1]))^;
//下面我说一下这个过程 ,@buffer[56]随便取第1个下标的地址,转成word指针,再取这个指针对应的值。
//byte 是8位。PWord是16位实际上已经越界了。这里的 PWord(@(Buffer[1]))^,取到后一个下标即 PWord(@(Buffer[2]))^ 组合成为一个数值。这个值就是$010F
//为什么是$010F,pascal数组分配方式为高字节在前,低字节在后。
ShowMessage(IntToStr(c));
d := Pbyte(@(Buffer[1]))^; //测试。以Pbyte指针就不会发生越界。
ShowMessage(IntToStr(d)); //就是Buffer[1]的值
end;
var
a:Cardinal; //Cardinal是无符号32位整数 相当于word
Buffer:array[1..2] of Byte; //声明数组 8位数组
c:Word; //定义一个c为word,方便数据测试用 16位 d:byte; //为了比对结果
begin
a := 10; //对本次测试无意义
Buffer[1] := $0F; //10进制15
Buffer[2] := $01; if PWord(@(Buffer[1]))^=a then
ShowMessage('');
c := Pword(@(Buffer[1]))^;
//下面我说一下这个过程 ,@buffer[56]随便取第1个下标的地址,转成word指针,再取这个指针对应的值。
//byte 是8位。PWord是16位实际上已经越界了。这里的 PWord(@(Buffer[1]))^,取到后一个下标即 PWord(@(Buffer[2]))^ 组合成为一个数值。这个值就是$010F
//为什么是$010F,pascal数组分配方式为高字节在前,低字节在后。
ShowMessage(IntToStr(c));
d := Pbyte(@(Buffer[1]))^; //测试。以Pbyte指针就不会发生越界。
ShowMessage(IntToStr(d)); //就是Buffer[1]的值
end;
全部回答
- 1楼网友:酒者煙囻
- 2021-03-18 17:08
搜一下:delphi 中的 if PWord(@(Buffer[i]))^=a then ...; 这个判断怎么取的值?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯