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操作,但结果却不正确,请高手解释一下.

解决方案 »

  1.   

    应该是inc(p,3)吧,现在的机器没装delphi没法试验,我觉得应该是这样的.如果说错了,别笑我哈.
      

  2.   

    呵呵,我搞错了,
      a:=20;
      P:=PByte(Pointer(@a));
      ShowMessage(IntToStr(p^));即为20p+1为0;p+2为0;p+3也为0
      

  3.   

    因为P是Byte类型在内存中只占一个字节,显示时也只显示一个字节的内容。
      

  4.   

    var
      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;
      

  5.   

    执行AND操作截取高低位我明白.我想不通的是既然INTEGER从低到高排列,那些么小于255的数应该放在最低字节内.我只截取那个字节里的数值,为什么得不到20.
      

  6.   

    指向INTEGER变量的指针应该指向最高字节吧.
      

  7.   

    var
      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;
    看看这些代码吧,呵~~,很容易的。