我写了一个解析器,它接受一个变量数组,并根据类型创建一个字符串。我使用这个字符串作为SQL请求的基础。
阅读文档:https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Variants.VarType我可以看到有21个CONSTANT值表示各种类型。
下面是提取类型索引的代码片段:typ := VarType(bob);
其中typ是整数,bob是变量。
我从文档中期望varString的“typ”为19,但它返回258。
看这里:https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.TVarData我可以看到:#define varString (WordWord_Type)(256)
所以文档表明varString可以是19或256,那么为什么我会得到258呢?
1条答案
按热度按时间wlsrxk511#
我希望从文档中看到varString的“typ”为19。
为什么你会期望这样?根据文档:
https://docwiki.embarcadero.com/Libraries/en/System#Constants
varLongWord
/varUInt32
(即32位无符号整数)的数值为十进制19,十六进制$13。另一方面,
varString
(即AnsiString
)的数值为十进制256,十六进制$100。而varUString
(即UnicodeString
)的数值为十进制258,十六进制$102。Delphi 的原生
String
类型自Delphi 2009以来一直是UnicodeString
,这就是为什么你会收到varUString
值。顺便说一句,RTL有一个
VarToStr()
函数,可以将Variant
转换为String
,支持Variant
可以容纳的所有类型。您不需要手动进行转换。