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

山姆

我正在使用Delphi XE2。漂亮的自我解释性问题。我有一个变体,其中我存储一个字符(例如“?”),我想将其转换为AnsiChar。如果无法投放,该如何转换。我尝试过用通常的方式进行转换,但是没有用。我尝试在Google上进行搜索,但没有找到直接的答案。我对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));

注意:最好将AnsiChar存储为字节而不是AnsiString,因为这样可以避免堆分配。


在注释中指出,您将变体分配为:

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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将方法转换为通用变体?

来自分类Dev

如何将Á转换为A

来自分类Dev

如何将Á转换为A

来自分类Dev

如何将转换转换为函数?

来自分类Dev

如何将 com 实例转换为变体,并在 idispach 调用中传递它

来自分类Dev

你一般如何将变体类型的值转换为字符串?

来自分类Dev

将变体转换为超级集变体或子集变体

来自分类Dev

如何将guid转换为* char

来自分类Dev

如何将[CustomClass]转换为[AnyObject]

来自分类Dev

如何将css转换为bss

来自分类Dev

如何将NSManagedObject转换为NSDictionary

来自分类Dev

如何将参数转换为数组

来自分类Dev

如何将XElement转换为XDocument

来自分类Dev

如何将.csv转换为.xls

来自分类常见问题

如何将度数转换为弧度?

来自分类Dev

如何将csv转换为数组

来自分类Dev

如何将char转换为String?

来自分类Dev

如何将字典转换为ConcurrentDictionary?

来自分类Dev

如何将QIcon转换为QPixmap

来自分类常见问题

如何将UIView转换为图像

来自分类Dev

如何将NSAttributedString转换为NSData?

来自分类Dev

如何将日期转换为timeago

来自分类常见问题

如何将AAR转换为JAR

来自分类Dev

如何将元组转换为namedtuple?

来自分类Dev

如何将String转换为Drawable

来自分类Dev

如何将JSONObjects转换为JSONArray?

来自分类Dev

如何将QImage转换为QByteArray?

来自分类Dev

如何将linq转换为lambda

来自分类Dev

如何将NSArray转换为NSString **