摘要:字符与Int 互相转换
int与char的互相转换
int
类型是一个32位的数据类型,因为其位有符号数,所以,其取值范围为:-2^31 至 2^31 - 1。
而char
为16位的数据,为无符号数,其范围为:0 至 2 ^ 16 -1,即 0 - 65535,
因此,在java中,无论是一个字符,还是一个字符型变量,实则也是一个数字,所以,可以直接将一个(不超过char的范围的)数字赋值给一个char变量,即可输出其结果:
char c1 = 97;
System.out.println(c1);
输出:a
int num1 = 'a';
System.out.println(num1);
输出:97
char c2 = 'a' + 1;
int num2 = 'a' + 1;
System.out.println("c2: " + c2);
System.out.println("num2: " + num2);
System.out.println("(char) num2: " + (char) num2);
输出:
c2: b
num2: 98
(char) num2: b
注意:
char 是16位的 0 至 2 ^ 16 -1,即 0 - 65535 ,int 是32位的,
对于低位转向高位自适应直接转换,char 转向 int ; int 转向 long
对于高位转低位需要强制转换
这里,由于是强制转换,将一个较多位数的类型转换成一个较少位数的类型,因此,可能会有损失发生,若int的数字大于65535,则会丢弃16位以外的数字,如下例:
int num8 = 65536 + 97;
char c8 = (char) num8;
System.out.println(c8);
// 打印num8与c8的十六进制输出
System.out.println(Integer.toHexString(num8));
System.out.println(Integer.toHexString(c8));
输出:
a
10061
61
num8的十六进制表示为0x0001 0061,直接将第一个字节丢弃,变为0x0061,即97,对应的字符为’a’。
技巧
有一个字符为'1'
,我们想将其变为数字1,或者,我们想将一个int类型的数字1转换为字符'1'
,这时,我们就可以这样写:
// '1' -> 1
char c9 = '1';
int num9 = c9 - '0';
// 1 -> '1'
int num10 = 1;
char c10 = (char)(num10 + '0');