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操作,但结果却不正确,请高手解释一下.
解决方案 »
- delphi 金额输入
- 请教:从exe给dll传递一个adoquery参数,报invalide pointer 错误,怎么解决?
- 有没有判断用户是否是Administrator的API
- 請教:如何實現dbgrid change的時候,彈出message
- Windows98安装DCOM98后怎么进行配置? 200501
- Win2000上怎样判断“Oracle服务”已经启动?
- 关于combox的itemindex的问题(很抱歉再提一次)
- 多次点击dbcombobox,下拉框所出现的内容与listfield字段实际的内容有出入
- 急,在线===~~~~~~~~
- 如何判断数据更新是否成功?
- 无故被扣了一分!!!
- 请高手推荐几本delphi7下网络编程方面的书。
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;
看看这些代码吧,呵~~,很容易的。