2011-09-20 126 views
2

出于某种原因,下面的代码无法正常工作:为什么我不能从char到int类型转换?

char cValue = '8'; 
int digits = (int)cValue; 

它一直给的5或7,或沿着这些线路的东西一定的价值。

我只是好奇为什么 - 我使用Character.getNumericValue(cValue);来代替。

为什么会发生这种情况?

+4

实际上,您是否获得值56,即字符“8”的ASCII值? –

+0

你可以说'char cValue = 8;'。然后演员应该按预期成功。 –

+0

@GregHewgill,这是有道理的。谢谢 – Cody

回答

6

可以 typecast char int,而事实上你是。字符'8'的二进制表示实际上是56(十进制)。有关转换,请参见any ASCII chart。你正在寻找的是解析,而不是铸造。 getNumericValue()分析字符,并给你它的数字等值。铸造字符只会改变字体类型,并使字体的图案保持不变。然后根据它们关联的变量的类型来解释这些位。

3

Java char是一个无符号的16位值。当您将其中一个转换为int时,您将获得该字符的Unicode值。字符'8'具有十进制56的Unicode值。

getNumericValue完全不同 - 它给出了字符的含义,如果它是具有数字含义的字符。

相关问题