2010-03-28 38 views
6

我们可以将字符转换为与ASCII值相同的整数,但是我们可以做相反的事情,即将给定的ASCII值转换为其等同的字符?我们可以将整数转换为字符

public String alphabets(int[] num) 
{ 
char[] s = new char[num.length]; 
String str = new String(); 
for(int i=0; i< num.length; i++) 
{ 
    s[i] = 'A' + (char)(num[i]- 1); 
    str += Character.toString(s[i]); 
} 
return str;   
} 

显示可能失去精度误差的...

+2

它说失去精度错误,因为int可以容纳比字符更大的数字。所以你可以将任何角色投射到一个int,但是整个整数的上限范围太大而不能投射到角色。 – Joel 2010-03-28 22:48:36

回答

8

转换到/从:

int i = 65; 
char c = (char)i; 

char c = 'A'; 
int i = (int)c; 
+3

nopes,它表示可能丢失精度 – higherDefender 2010-03-28 17:01:05

+7

@ D.J。,可能的精度损失不适用于ASCII字符范围。 – Yishai 2010-03-28 17:06:01

1

不铸造char工作?

+0

nopes它说可能损失精度 – higherDefender 2010-03-28 17:00:19

+0

真的吗?当我用java/javac 1.6进行尝试时工作。 – 2010-03-28 17:09:18

0

有几种方法。 看看字符包装类。 Character.digit()可能会诀窍。 其实这个伎俩!

Integer.valueOf('a') 
+3

D.J.是要求一个字符的整数,而不是相反。 – Ricket 2010-03-28 17:28:05

3

Character.toChars

public static char[] toChars(int codePoint) 

指定字符(Unicode代码点)转换为存储在字符数组其UTF-16表示。

5

你居然甚至不需要铸造:

char c = 126; 

其实这似乎为Unicode字符正常工作。例如尝试:

System.out.println((int) 'โ'); // outputs 3650, a thai symbol 
char p = 3650; 
System.out.println(p); // outputs the above symbol 
6

的错误比你最初会觉得更加复杂,因为它实际上是“+”操作符,导致“精度误差的可能的损失”。

s[i] = (char)('A' + (num[i]- 1));


说明
在在Java Language Specification§5.6.2 Binary Numeric Promotion第一项目列表中指出,:

当经营者申请 可如果转换移动解决错误二进制数字提升为一对操作数[...]遵循以下规则,按顺序使用扩展转换(§5.1.2)根据需要转换操作数:

  • 如果任何操作数是引用类型,则执行拆箱转换(第5.1.8节)。然后:
  • 如果任一操作数的类型为double,则另一个操作数转换为double。
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float。
  • 否则,如果任一操作数的类型为long,则另一个操作数转换为long。
  • 否则,两个操作数都转换为int类型。

在接下来的项目列表则指出:

二元数值提升是对某些运营商的操作数执行:

  • 乘法运算符*,/和%(§15.17)
  • 加法和减法运算符用于数字类型+和 - (§15.18.2)
  • 数值比较运算符,和> =(§15.20.1)
  • 数值相等运算符==和!=(§15.21.1)
  • 整数位运算符&,^和| (§15.22.1)
  • 在某些情况下,条件运算符? :(§15.25)

在你的情况下,这意味着:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
因此错误。