gpt4 book ai didi

delphi - 如何将变体转换为(或转换为)AnsiChar?

转载 作者:行者123 更新时间:2023-12-03 15:41:00 26 4
gpt4 key购买 nike

我正在使用Delphi XE2。非常不言自明的问题。我有一个变体,其中存储单个字符(例如“?”),并且我想将其转换为 AnsiChar。如果我不能转换它,那么我该如何转换它。我尝试以通常的方式进行转换,但没有成功。我尝试在谷歌上搜索,但没有找到直接的答案。我对 unicode 转换的理论不感兴趣。我正在寻找一两行delphi代码中的引用信息。

最佳答案

这是一种方法:

v : Variant;
a : AnsiChar;
...
v := AnsiChar('a'); // Will be stored as an AnsiString
// Check variant
if VarIsStr(v) and (Length(AnsiString(v)) = 1) then
a := AnsiString(v)[1]; // Cast variant holding an AnsiString to an AnsiChar
//Another way
if (VarType(v) = varString) and (Length(AnsiString(v)) = 1) then
a := AnsiString(v)[1]; // Cast variant holding an AnsiString to an AnsiChar

该变体可以保存不同的字符串类型(AnsiString=varString、UnicodeString=varUString 和 WideString=varOleStr)。

如果您将 AnsiChar 存储为变体中的字节:

v := Byte(AnsiChar('A')); // Will be stored as a byte
if (VarType(v) = varByte) then
a := AnsiChar(Byte(v));

注意:与 AnsiString 相比,将 AnsiChar 存储为字节更可取,因为这样可以避免堆分配。

<小时/>

在评论中注意到您将变体指定为:

v := 'c';

这意味着您的变体字符串将采用 varUString 格式。

if (Vartype(v) = varUString) and (Length(String(v)) = 1) then 
a := AnsiChar(String(v)[1]);

如果您想涵盖所有基础并拥有一对一的变体转换例程:

function GiveMeThatAnsiCharFromVariant( const v: Variant; var a: AnsiChar): Boolean;
// Accepts UnicodeString,AnsiString,WideString,byte for conversion to AnsiChar;
begin
Result := False;
if VarIsStr(v) then
begin
case VarType(v) of
varString :
if (Length(AnsiString(v)) = 1) then
begin
a := AnsiChar(AnsiString(v)[1]);
Result := True;
end;
varUString :
if (Length(String(v)) = 1) then
begin
a := AnsiChar(String(v)[1]);
Result := True;
end;
varOleStr :
if (Length(Widestring(v)) = 1) then
begin
a := AnsiChar(Widestring(v)[1]);
Result := True;
end;
end;
end
else
begin
if (VarType(v) = varByte) then
begin
a := AnsiChar(Byte(v));
Result := True;
end;
end;
end;

关于delphi - 如何将变体转换为(或转换为)AnsiChar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19557167/

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