16,747
社区成员




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;
//方法 6
verfyFile.write(Pointer(str)^,length(str)); //OK