下面是一个代码片段,
int a = 1;
char b = (char) a;
System.out.println(b);
但我得到的是空输出。
int a = '1';
char b = (char) a;
System.out.println(b);
我将得到1作为我的输出。
有人能解释一下吗?如果我想像第一个代码片段中那样将int转换为char,我应该怎么做?
发布于 2013-08-01 11:52:38
int a = 1;
char b = (char) a;
System.out.println(b);
将打印出带有ASCII1的字符(标题开头的字符,这是不可打印的;见下表:C0 Controls and Basic Latin,与Unicode code point相同)
int a = '1';
char b = (char) a;
System.out.println(b);
将打印带有Unicode代码点49的字符(一个对应于'1')
如果你想转换一个数字(0-9),你可以在上面加上48,然后进行转换,或者像Character.forDigit(a, 10);
这样的东西。
如果您希望转换被视为Unicode代码点的int
,则可以使用Character.toChars(48)
。
发布于 2015-06-05 05:05:41
我的答案类似于jh314的答案,但我会更深入地解释一下。
在这种情况下,您应该做的是:
int a = 1;
char b = (char)(a + '0');
System.out.println(b);
在这里,我们使用'0‘,因为字符实际上是由ASCII值表示的。'0‘是一个字符,用值48表示。
我们输入(a + '0')
,为了将它们相加,Java将'0‘转换成它的ASCII值,它是48,a是1,所以和是49。然后我们所做的是:
(char)(49)
我们将int
转换为char
。49的ASCII等价物是'1‘。您可以通过这种方式将任何数字转换为字符,这比使用.toString()
方法,然后用.charAt()
方法减去数字更智能和更好。
发布于 2015-10-09 14:51:52
看起来您正在寻找Character.forDigit
方法:
final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'
还有一个方法可以从char转换回int:
int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'
请注意,通过更改RADIX
,您还可以支持十六进制(基数16)和最大36的任何基数(或Character.MAX_RADIX
,因为它也被称为)。
https://stackoverflow.com/questions/17984975
复制相似问题