gpt4 book ai didi

delphi - 在 Delphi 2009 中将 TMemoryStream 转换为 'String'

转载 作者:行者123 更新时间:2023-12-03 14:33:32 26 4
gpt4 key购买 nike

在 Delphi 2009 之前我们有以下代码:

function MemoryStreamToString(M : TMemoryStream): String;
var
NewCapacity: Longint;
begin
if (M.Size = > 0) or (M.Memory = nil) then
Result:= ''
else
begin
if TMemoryStreamProtected(M).Capacity = M.Size then
begin
NewCapacity:= M.Size+1;
TMemoryStreamProtected(M).Realloc(NewCapacity);
end;
NullString(M.Memory^)[M.Size]:= #0;
Result:= StrPas(M.Memory);
end;
end;

现在我们如何使用 Delphi 2009 将此代码转换为支持 Unicode?

最佳答案

即使对于较旧的 Delphi 版本,您的代码也不必要地复杂。毕竟,为什么获取流的字符串版本会强制重新分配流的内存?

function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;

这适用于所有 Delphi 版本,而不仅仅是 Delphi 2009。它在流为空时有效,没有任何特殊情况。 SetString是一个未被充分重视的功能。

如果切换到 Delphi 2009 后流的内容没有更改为 Unicode,那么您应该改用此函数:

function MemoryStreamToString(M: TMemoryStream): AnsiString;
begin
SetString(Result, PAnsiChar(M.Memory), M.Size);
end;

这相当于您的原始代码,但跳过特殊情况。

关于delphi - 在 Delphi 2009 中将 TMemoryStream 转换为 'String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com