在Integer.java中,有以下代码:
/**
* All possible chars for representing a number as a String
*/
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
我认为你需要的所有数字/字符都在0-9范围内,字母A到F.字母(A,B,C,D,E和F)只有在数字被表示时才会被使用在基数16(十六进制)。
为什么Javadoc会说“所有可能的字符”?是否实际使用了从G到Z的字母?如果基数(我们代表数字)大于16,我认为可以使用它们。
答案 0 :(得分:11)
toString
方法支持最多MAX_RADIX
的任意基数(如20),定义为36
答案 1 :(得分:6)
"Base36: Uses in practice"解释了一些常见用例。
- 公告板系统的远程成像协议使用基本36符号以紧凑的形式传输坐标。
- 许多网址重定向系统(如TinyURL或SnipURL / Snipr)也使用基本36整数作为紧凑的字母数字标识符。
- Geohash-36,一种坐标编码算法,使用基数36但使用小写和大写字母字符的混合,以避免元音,元音外观数字和其他字符混淆。
- RickDate等各种系统使用base 36作为文件名中Gregorian日期的紧凑表示,每天使用一个数字表示日期和月份。
- [还有更多]
协议设计人员有时需要一个紧凑的ASCII字母数字,不区分大小写的方案来编码整数。 Base36符合要求。
答案 2 :(得分:2)
它支持最大为36的基数,同时将整数转换为字符串表示。
MAX和MIN基数都在Character类中指定为
public static final int MIN_RADIX = 2;
public static final int MAX_RADIX = 36;
尝试这样的事情:
for (int i = 2; i < 36; i++) {
System.out.println("Radix = "+i+" -- " + Integer.toString(123, i));
}
输出:
Radix = 2 -- 1111011
Radix = 3 -- 11120
Radix = 4 -- 1323
Radix = 5 -- 443
Radix = 6 -- 323
Radix = 7 -- 234
Radix = 8 -- 173
Radix = 9 -- 146
Radix = 10 -- 123
Radix = 11 -- 102
Radix = 12 -- a3
Radix = 13 -- 96
Radix = 14 -- 8b
Radix = 15 -- 83
Radix = 16 -- 7b
Radix = 17 -- 74
Radix = 18 -- 6f
Radix = 19 -- 69
Radix = 20 -- 63
Radix = 21 -- 5i
Radix = 22 -- 5d
Radix = 23 -- 58
Radix = 24 -- 53
Radix = 25 -- 4n
Radix = 26 -- 4j
Radix = 27 -- 4f
Radix = 28 -- 4b
Radix = 29 -- 47
Radix = 30 -- 43
Radix = 31 -- 3u
Radix = 32 -- 3r
Radix = 33 -- 3o
Radix = 34 -- 3l
Radix = 35 -- 3i
Radix = 36 -- 3f