function Rword1(add:DWORD):byte;
begin
  try 
    Result := Pbyte(add)^;
  except
    Result := 0; 
  end;
end; 这样可以读取指定地址的1字节数据
那怎么才能写入1字节数据呢?还有怎么可以读取内存里的字符串,比如说我内存里的信息是 "ABC哦" 我怎么才能把他完整的度读出来,还有一点就是怎么才能只读出A来也就是只读取内存里的从1到几个字节.,谢谢.

解决方案 »

  1.   

    function Rword1(var add:DWORD):byte;
    begin
       Pbyte(add)^:=1;
    end; 
      

  2.   


    procedure writeaddrvalue (addr: longword; value: byte);
    begin
       PByte (addr)^ := value;
    end;function readchar (const str: string; index: integer): char;
    begin
       if index < length(str) then
          result := str[index+1]
       else
          result := #0;
    end;
      

  3.   

    首先需要确认你要读取的内存是合法的内存,也就是说,是一个已经分配出去的可读写的内存,否则会保存。你给的函数中,首先要保证 add:DWORD 参数中,add所指定的内存是可读写的,然后就可以通过强制类型转换进行读写,例如,你如果想读一个字节,可以 Result := PByte(Add)^;  你想写入一个字节,可以 
    PByte(Add)^=10;字符串以也一样,Delphi中的String类型的数据,大部分其字符串变量保存的是字符串的首地址(因为Delphi采用了copy on write技术,所以字符串在没有被改写之前就强制类型转换去读写,可能会意外破坏数据)。如果你要读取一个字符串的某个字符,可以这么读:
    s: String;
    ...
    s := 'ABC哦';ShowMessage(s[1]);
    或者 
    ShowMessage(PChar(s)^);写入也类似
      s[1] := 'O';

      PChar(s)^ := 'O';如果你要修改字符串某个位置的字符,只要不越界,可以直接读写,例如
      s[3] := 'K';

      PChar(Integer(Pointer(s)) + 2)^ := 'K';
    需要注意的是,采用下标的方式访问字符串,是从1开始的,而采用PChar方式,则是从0开始使用Copy或者move函数可以复制字符串中某个或某几个连续的字符,区别在于形式上Copy用来复制字符串而move可以进行两个地址之间的对拷,也就是从一个地址上将内容复制到另一个地址空间中。