Vb.net Asc()VB函数中存在错误?

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。

您能告诉我为什么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
。(除非是
>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)
肯定不能称为标准类型转换,因为它有不同的行为?