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;
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;
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;
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);
...
结论:动态数组名不能直接做指针,对吗?太经典了,结帖。