请教TFileStream.write和Delphi中的数组指针相关问题
procedure TForm1.btn1Click(Sender: TObject);
var
verifyMsg : array[0..48] of Char;
signedLen : Integer;
verfyFile : TFileStream;
str : string;
begin
str := 'hello world';
FillChar(verifyMsg, SizeOf(verifyMsg), 0);
CopyMemory(PChar(@verifyMsg[0]), PChar(@str[1]), Length(str)); //要从str[1] 开始copy
verfyFile := TFileStream.Create('c:\\test.data', fmCreate or fmShareDenyRead);
//方法 1
//verfyFile.Write(pchar(@verifyMsg[0])^, Length(verifyMsg)); //OK 工作正常
//方法 2
// verfyFile.Write(verifyMsg, Length(verifyMsg)); //OK 工作正常
//方法 3
// verfyFile.write(pchar(str)^,length(str)); //OK 工作正常
//方法 4
//wrong 是不是因为string 内部结构不一样,如从索引1开始存储的是内容,方法3中的 pchar(str) 其实内部已经转换了.
// verfyFile.write(str, length(str));
//方法 5 OK 从索引1开始.
verfyFile.write(str[1], length(str));
freeAndNil(verfyFile);
end;
Q1:
function THandleStream.Write(const Buffer; Count: Longint): Longint;
这个函数的签名.buffer 类型是什么,好像是没有定义?它的意思是不是不是指针类型也行,具体根据buffer参数而定.
Q2:
方法一的代码是从网上看的,感觉完全是脱裤放屁,pchar(@verifyMsg[0])^ 先取数组指针,再转PChar再反解引用,于是我改成方法二了,工作正常,我的理解对么?在其他地方应用时,delphi中的数组名是不是也可以当成数组指针使用?
Q3:
方法4是有问题的, 是不是因为string 内部结构不一样,如从索引1开始存储的是内容,方法3中的 pchar(str) 其实内部已经转换了,把string转换成了char数组的指针了.所以方法3.4 的问题和1.2 不一样了.
请大家多多指教.
...全文
相关推荐
delphi磁盘读写
本篇将详细讲解Delphi中磁盘读写的相关知识点,包括基本的文件操作、流式读写、二进制文件处理、文件定位和错误处理。1.
delphi读写取流记录文件TFileStream
一旦创建了TFileStream对象,就可以使用其Read和Write方法来读写文件中的字节。
delphi读取文件流
总结,Delphi中的`TFileStream`提供了方便的文件流操作,通过它我们可以高效地读取、写入文件。结合字节数组,可以实现文件的复制或其他数据处理任务。
Delphi流文件操作
在Delphi中,所有流对象的基类为Tstream类,其中定义了所有流的共同属性和方法。Tstream类中定义了以下几个重要的属性和方法:1. Size属性:返回流中数据的大小,以字节为单位。2.
TXT文本的创建、编辑等Delphi相关处理.rar
首先,让我们深入理解Delphi中的文件操作。在Delphi中,我们可以使用TFile和TFileStream类来创建、读取和写入文件。


语言基础/算法/系统设计
