gpt4 book ai didi

德尔福 XE3 : Convert WideChar array to Unicode string HOWTO?

转载 作者:行者123 更新时间:2023-12-03 19:03:01 24 4
gpt4 key购买 nike

我在这里对上面给出的问题进行了一些研究,并提出了以下代码:

VarStr = array of WideChar;

function ArrayToString(const a: VarStr): UnicodeString;
begin
if Length(a) > 0 then
begin
ShowMessage ('Länge des übergebenen Strings: ' + IntToStr(Length(a)));
SetString(Result, PWideChar(@a[0]), Length(a) div 2)
end
else
Result := '';
end;

ShowMessage 显示给定数组中正确数量的字符,但函数的结果始终为空字符串。

请问你的想法?

最佳答案

您传递了错误的长度值。你只要求一半的字符。像这样修复您的代码:

function ArrayToString(const a: VarStr): string;
begin
SetString(Result, PWideChar(a), Length(a));
end;

但是,您还报告您的函数返回一个空字符串。最可能的原因是您将无效输入传递给函数。考虑这个程序:
{$APPTYPE CONSOLE}

type
VarStr = array of WideChar;

function ArrayToStringBroken(const a: VarStr): UnicodeString;
begin
SetString(Result, PWideChar(@a[0]), Length(a) div 2);
end;

function ArrayToStringSetString(const a: VarStr): UnicodeString;
begin
SetString(Result, PWideChar(a), Length(a));
end;

var
a: VarStr;

begin
a := VarStr.Create('a', 'b', 'c', 'd');
Writeln(ArrayToStringBroken(a));
Writeln(ArrayToStringSetString(a));
end.

输出是:

抗体
A B C D

因此,除了您问题中的代码存在问题外,您似乎对问题中没有的代码也有问题。

也许当你说:

The result of the function is always an empty string.



您实际上的意思是当您将返回值传递给 ShowMessage 时不显示任何文本。 .那是完全不同的事情。正如@bummi 在评论中指出的那样, ShowMessage将在遇到的第一个空终止符处截断其输入。使用适当的调试工具检查变量的内容。

关于德尔福 XE3 : Convert WideChar array to Unicode string HOWTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27226363/

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