Integer在内存中占四个字节,Byte只占一个字节.我用如下代码想用PByte截取Integer部分数值为什么行不通?var
P:Pbyte;
a:Integer;
begin
a:=20;
P:=PByte(Pointer(@a));
ShowMessage(IntToStr(Integer(Pointer(@a))));
ShowMessage(IntToStr(Integer(P)));//两者地址相等
dec(P,3);//把指针移到Integer变量在内存中的最低字节处
ShowMessage(IntToStr(Integer(P)));
ShowMessage(IntToStr(P^));//此时值却不是20
end;上述代码是我想利用另一种方法实现shl shr操作,但结果却不正确,请高手解释一下.
P:Pbyte;
a:Integer;
begin
a:=20;
P:=PByte(Pointer(@a));
ShowMessage(IntToStr(Integer(Pointer(@a))));
ShowMessage(IntToStr(Integer(P)));//两者地址相等
dec(P,3);//把指针移到Integer变量在内存中的最低字节处
ShowMessage(IntToStr(Integer(P)));
ShowMessage(IntToStr(P^));//此时值却不是20
end;上述代码是我想利用另一种方法实现shl shr操作,但结果却不正确,请高手解释一下.
a:=20;
P:=PByte(Pointer(@a));
ShowMessage(IntToStr(p^));即为20p+1为0;p+2为0;p+3也为0
i:integer;
b:byte;
begin
i:=$F020;
showmessage(inttohex(i,4));//--F020
i:=i and $00FF;
showmessage(inttohex(i,4));//---0020
b:=i;
showmessage(inttohex(b,2));//---20
//---取低字节数据了
end;
pbyte:^byte;
i:integer;
b:byte;
begin
i:=$20304050;
memo1.lines.add('i value: '+inttostr(i)+' Hex :'+inttohex(i,8));
pbyte:=@i;
memo1.lines.add('i address is :'+inttohex(integer(@i),8));
memo1.lines.add('pbyte address is :'+inttohex(integer(pbyte),8));
memo1.lines.add('pbyte[0] value is :'+inttohex((pbyte^),8));
b:=pbyte^;
memo1.lines.add('b value is :'+inttostr(b)+' Hex:'+inttohex(b,8));
inc(pbyte);
memo1.lines.add('pbyte[1] value is :'+inttohex((pbyte^),8));
b:=pbyte^;
memo1.lines.add('b value is :'+inttostr(b)+' Hex:'+inttohex(b,8));
inc(pbyte);
memo1.lines.add('pbyte[2] value is :'+inttohex((pbyte^),8));
b:=pbyte^;
memo1.lines.add('b value is :'+inttostr(b)+' Hex:'+inttohex(b,8));
inc(pbyte);
memo1.lines.add('pbyte[3] value is :'+inttohex((pbyte^),8));
b:=pbyte^;
memo1.lines.add('b value is :'+inttostr(b)+' Hex:'+inttohex(b,8));end;
看看这些代码吧,呵~~,很容易的。