Vb.net Asc()VB函数中存在错误?
您能告诉我为什么Asc()函数返回不正确的结果吗Vb.net Asc()VB函数中存在错误?,vb.net,string,Vb.net,String,您能告诉我为什么Asc()函数返回不正确的结果吗 Dim TestChar = Chr(128) Dim CharInt = Asc(TestChar) ' this is a mistake on Windows 7 x64. Asc(TestChar) returns 136 instead of 128 我在另一台计算机上执行了这段代码,结果是128 谢谢。您的计算机正在使用不同的默认代码页 Asc功能使用系统当前的ANSI代码页。 Chr函数只是将值强制转换为char。
Dim TestChar = Chr(128)
Dim CharInt = Asc(TestChar) ' this is a mistake on Windows 7 x64. Asc(TestChar) returns 136 instead of 128
我在另一台计算机上执行了这段代码,结果是128
谢谢。您的计算机正在使用不同的默认代码页
Asc
功能使用系统当前的ANSI代码页。Chr
函数只是将值强制转换为char
。(除非是>255
)我刚刚用Visual Studio 2010在Windows 7 x64上尝试了这个精确的代码,得到了预期值128。我尝试了混合选项(推断、显式等),但值保持不变。你能提供更多的细节来帮助追踪这件事吗
Sub Main()
Dim TestChar = Chr(128)
Dim CharInt = Asc(TestChar)
Console.WriteLine(CharInt)
Stop
End Sub
问题是我使用了不同的默认代码页。我把它改成了英文,代码很好用。
谢谢大家! 我不太确定这是否是原因,因为.NET通常都使用Unicode。当然,除非这是VB6带来的延迟。这将是VB.NET不存在的另一个很好的理由。@Matti:是的,这是来自VB6。当然这不可能是全部吗
Asc
使用当前的ANSI代码页,但Chr
也使用当前的ANSI代码页:它将ANSI代码点编号转换为字符(我认为这最好称为转换,而不是转换)。所以我相信Asc(Chr(X))
总是会返回X?我用中文代码页尝试了Alexander的代码片段,Asc(TestChar)
是128。也许事实上,Alexander用一个代码页运行了Asc
,然后在另一台计算机上用另一个代码页运行了Chr
?@MarkJ:Chr
执行标准类型转换。(除非它是>255
)在反射器中查看它。@再次SLaks。总结最后的评论。如果(char)X
可以称为标准类型转换,那么Chr(X)
肯定不能称为标准类型转换,因为它有不同的行为?