5

为什么大写和小写文字的结果相同?例如:

char ch1 = 'A';
char ch2 = 'a';
char ch3 = 'Z';
char ch4 = 'z';

print("ch1 -- > " + Integer.toBinaryString(Character.getNumericValue(ch1)));
print("ch2 -- > " + Integer.toBinaryString(Character.getNumericValue(ch2)));
print("ch3 -- > " + Integer.toBinaryString(Character.getNumericValue(ch3)));
print("ch4 -- > " + Integer.toBinaryString(Character.getNumericValue(ch4)));

结果我得到:

ch1 -- > 1010
ch2 -- > 1010
ch3 -- > 100011
ch4 -- > 100011

并没有真正看到“A”和“a”之间的区别。即使我使用 UTF 格式的字符文字(\u0041 表示“A”,\u0061 表示“a”),我也会得到相同的结果。

4

2 回答 2

7

它的行为与记录的完全相同:

大写字母 AZ('\u0041' 到 '\u005A')、小写字母('\u0061' 到 '\u007A')和全角变体('\uFF21' 到 '\uFF3A' 和 '\uFF41'通过 '\uFF5A') 形式具有从 10 到 35 的数值。

基本上这意味着在解析十六进制(比如说)时0xfa == 0xFA,正如您所期望的那样。

我只希望在使用 base64 之类的东西时大小写很重要。

于 2012-12-05T07:02:35.663 回答
4

从评论来看,您实际上是在寻找字符的代码点,而不是它们的数值,所以我将把它隔离成一个答案。该getNumericValue()函数在解释其字形时返回字符作为数字的含义,它不返回字符的代码点。例如,getNumericValue('5')返回 5 作为int,而不是 的代码点5

要使用代码点,只需按原样使用您的变量或 char 文字。char是数值数据类型。例如,System.out.println((int)'a');将打印 65,非常简单。

于 2012-12-05T07:18:56.567 回答