var
  buffer:pchar;//PByteArray;
  myStream:TFileStream;
  PHEX,PCHTemp:PCHAR;
  FileHandle:integer;
  s:string;
begin    
    myStream:=TFileStream.Create('c:\a.txt', fmOpenRead);//a.txt的内容是:15 一个数字
    with myStream do
    try
      //1.通过pchar
      GetMem(buffer,size);
      Read(buffer^, Size);
      FileHandle := FileCreate('c:\a0.txt');
      FileWrite(FileHandle,buffer,size);
      FileClose(FileHandle);
      //2.通过string
      setlength(s,size);
      seek(0,soFromBeginning);
      Read(pointer(s)^, Size);
      FileHandle := FileCreate('c:\s0.txt');
      FileWrite(FileHandle,pointer(s),size);
      FileClose(FileHandle);
      //3.pchar的内容转换为16进制后保存为文件
      GetMem(PHEX,2*size);
      BINTOHEX(buffer,PHEX,size);
      FileHandle := FileCreate('c:\a1.txt');
      FileWrite(FileHandle,PHEX,size);
      FileClose(FileHandle);
      //4.从16进制换回来
      HEXTOBIN(PHEX,buffer,size);
      FileHandle := FileCreate('c:\a2.txt');
      FileWrite(FileHandle,buffer,size);
      FileClose(FileHandle);
    finally
      freemem(buffer);
      freemem(PHEX);
      free;
    end;
end;

解决方案 »

  1.   

    var
      buffer:pchar;//PByteArray;
      myStream:TFileStream;
      PHEX,PCHTemp:PCHAR;
      FileHandle:integer;
      s:string;
    begin    
        myStream:=TFileStream.Create('c:\a.txt', fmOpenRead);//a.txt的内容是:15 一个数字
        with myStream do
        try
          //1.通过pchar
          GetMem(buffer,size);
          FillMemory(Buffer, size, 0);
          Read(buffer^, Size);
          FileHandle := FileCreate('c:\a0.txt');
          FileWrite(FileHandle,buffer^,size);
          FileClose(FileHandle);
          //2.通过string
          setlength(s,size);
          seek(0,soFromBeginning);
          Read(pointer(@s[1])^, Size);
          FileHandle := FileCreate('c:\s0.txt');
          FileWrite(FileHandle,s[1],size);
          FileClose(FileHandle);
          //3.pchar的内容转换为16进制后保存为文件
          GetMem(PHEX, 2*size);
          BINTOHEX(buffer,PHEX,size);
          FileHandle := FileCreate('c:\a1.txt');
          FileWrite(FileHandle,PHEX^,size*2);
          FileClose(FileHandle);
          //4.从16进制换回来
          HEXTOBIN(PHEX,buffer,size);
          FileHandle := FileCreate('c:\a2.txt');
          FileWrite(FileHandle,buffer^,size);
          FileClose(FileHandle);
        finally
          freemem(buffer);
          freemem(PHEX);
          free;
        end;
    end;
      

  2.   

    感谢postren(小虫),完全正确!另外补充学习后的:
    1.char
      ...
      chrArray:array of char;
      ...
      setlength(chrArray,size);
      Read(pointer(@chrArray[0])^, Size);
      ...
      FileWrite(FileHandle,chrArray[0],size);
      ...
    2. byte
      byteArray:array of byte;
      ...
      setlength(byteArray,size);
      Read(pointer(@byteArray[0])^, Size);
      ...
     结论:动态数组名不能直接做指针,对吗?太经典了,结帖。
      

  3.   

    http://community.csdn.net/Expert/topic/4743/4743426.xml?temp=.9206354