当我们将ASCII值转换为Char值时,我们使用Chr(Integer)
。当我们将Char值转换为ASCII值时,我们使用Asc(Char)
(返回一个整数)。
我的问题是:
当最大ASCII值为字节时,为什么Char需要将其值转换为Integer?为什么我们不能使用Byte而不是Integer?
答案 0 :(得分:1)
至于为什么Chr()
接受整数:
只有编码支持超过一个字节的字符范围。
请参阅Char Chr(Integer CodeChar)
的文档:Strings.Chr
至于为什么Asc()
提供整数:
Asc
希望支持多字节字符,例如 controlchars ,i.E。 CR LF
请参阅Integer Asc(Char String)
的文档:Strings.Asc
答案 1 :(得分:1)
Chr()和Asc()函数是来自早期VB版本的遗留函数,当Unicode尚未出现时。 不的版本具有字节类型,直到VB.NET才会添加。所以他们使用Integer代替了当时的16位值。
您应该不再次使用它们,只维护它们以便轻松移植旧的VB代码并具有遗留行为。 ChrW()和AscW()是现代版本,他们知道如何处理Unicode。其中Integer仍然适合处理Unicode代码点的范围。 AscW中的“Asc”不合适,该功能实际上并不转换为ASCII码。您将获得数字Unicode代码点值。但他们有点坚持这个名字。