procedure TForm1.Button2Click(Sender: TObject);
var
  FileStream: TFileStream;
  i: integer;
  filesize: integer;
begin
  screen.Cursor := crHourGlass;
  filesize := 3;
  //这里是DST文件,或是JPG什么的。。
  FileStream:= TFileStream.Create('d:\RP533.DST',fmOpenRead);
  MemoryStream := TmemoryStream.Create;
  try
    MemoryStream.LoadFromStream(FileStream);
  finally
    FileStream.Free;
  end;
  TempMemory := TmemoryStream.create;
  i:=0;
  try
    MemoryStream.Position := 512;
    //MemoryStream.SaveToFile('aaa.ini');
    while MemoryStream.Position < MemoryStream.Size -1 do
    begin
      TempMemory.Position := 0 ;
      TempMemory.Size := 0;
      if MemoryStream.Size - MemoryStream.Position < FileSize then
      FileSize := MemoryStream.Size - MemoryStream.Position;
      TempMemory.CopyFrom(MemoryStream,FileSize);
      TempMemory.Read(BufferARR,TempMemory.Size);
      //这里按照我的理解BufferARR应该有三个byte吧!~现在我想把它以二进制的
      //形式取出来,然后按位进行处理!小菜搞了二天一个晚上,555
      //大侠帮帮忙,要不101又完了!!!!!
      ReadMemory();
    end;
  finally
    MemoryStream.Free;
    TempMemory.Free;
  end;
  screen.Cursor := crDefault;
end;

解决方案 »

  1.   

    TempMemory.write(BufferARR,TempMemory.Size);
      

  2.   

    加一点:三个BYTE分别取出来,然后分别按位进行处理。。多谢各位了。。
      

  3.   

    to:outer2000(天外流星) 
    你这样是把它写到TempMemory吧!
      

  4.   

    是我没说清楚:
    BufferARR:PcharTempMemory.Read(BufferARR,TempMemory.Size);
    BufferARR好象没取到值!!1如果取到了(应该是三个BYTE),又怎么把它转换成二进制!如果你用ULEDIT打开个JPG或是GIF的话,就可以知道我在说什么了!
      

  5.   

    for i := length(s) downto 2 do
        s[i] := char(byte(s[i]) XOR byte (s[i-1]));
      

  6.   

    注意:语句写的有问题:
    每次创建实体时都要用try语句保护起来,
    以防止创建失败不能及时释放资源。
      

  7.   

    TempMemory.Size := 0;?
    这句写错了吧
      

  8.   

    TempMemory.Read(BufferARR,TempMemory.Size);
    相当于TempMemory.Read(BufferARR,0);
      

  9.   

    //TempMemory.Size := 0;
    一样的我测试过了:
    TempMemory.CopyFrom(MemoryStream,FileSize);这里TempMemory是能取到三个BYTE的!
      

  10.   

    To: michael_king(戴着戒指) 
    有这样一说吗?
    难道的我被误导了???
      

  11.   

    TempMemory.Size := 3;
    试过了吗?
      

  12.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
    TempMemory,MemoryStream : TmemoryStream ;
      FileStream: TFileStream;
      i: integer;
      filesize: integer;
      BufferARR:PChar;
    begin
      screen.Cursor := crHourGlass;
      filesize := 3;
      //这里是DST文件,或是JPG什么的。。
      FileStream:= TFileStream.Create('C:\Documents and Settings\Administrator\桌面\1.txt',fmOpenRead);
      MemoryStream := TmemoryStream.Create;
      try
        MemoryStream.LoadFromStream(FileStream);
      finally
        FileStream.Free;
      end;
      TempMemory := TmemoryStream.create;
      i:=0;
      try
        MemoryStream.Position := 512;
        //MemoryStream.SaveToFile('aaa.ini');
        while MemoryStream.Position < MemoryStream.Size -1 do
        begin
          TempMemory.Position := 0 ;
          TempMemory.Size := 0;
          if MemoryStream.Size - MemoryStream.Position < FileSize then
          FileSize := MemoryStream.Size - MemoryStream.Position;
          TempMemory.CopyFrom(MemoryStream,FileSize);
          TempMemory.Read(BufferARR,TempMemory.Size);
          //这里按照我的理解BufferARR应该有三个byte吧!~现在我想把它以二进制的
          //形式取出来,然后按位进行处理!小菜搞了二天一个晚上,555
          //大侠帮帮忙,要不101又完了!!!!!
        Label1.caption:=strpas(BufferArr);
        end;
      finally
        MemoryStream.Free;
        TempMemory.Free;
      end;
      screen.Cursor := crDefault;
    end;
    是对的