java 十六进制 Integer 进制转换 源码解读
来源:互联网 发布:在淘宝上开店货源怎么办 编辑:程序博客网 时间:2024/06/05 15:59
以10进制转16进制为例
Java 中的 java.lang.Integer类提供了进制转换的方法。
比如:将十进制数209转换为十六进制
//调用toHexString方法,将十进制转为十六进制Integer.toHexString(209);
再看一下该方法实现:
//在Integer类中封装了进制转换的通用方法toUnsignedStringpublic static String toHexString(int i) { return toUnsignedString(i, 4);}
详细解读一下toUnsignedString方法
/** * 进制转换方法 * * @param i 十进制数 * @param shift * 1:转成2进制 * 3:转成8进制 * 4:转成16进制 * @return 相应的结果 */private static String toUnsignedString(int i, int shift) { //int类型,表示4个字节,一个字节8位,所以取32位 char[] buf = new char[32]; int charPos = 32; //转换成对应的进制,shift=4的话,radix=16,具体原因,下面解释 int radix = 1 << shift; //if shift = 4 then mask = 15 //这里之所以这么写,是因为二进制转16进制时,每4位转为一个16进制数 //假如把十进制数209转成16进制 //209的二进制为:110100(此时mask=15) //15 的二进制位: 1111 //15 & 209的目的,就是为了取二进制的后四位数字,进而转换成对应的16进制 int mask = radix - 1; do { //digits是定义在Integer中的一个字符串常量数组(下面贴出) //用来获取后四位对应的16进制数 buf[--charPos] = digits[i & mask]; //既然后四位已经获取到了,那就右移四位,获取接下来四位的16进制数 //如209,二进制是110100,已经获取了后四位所表示的16进制时0x4, //右移四位,获得二进制数0011(不足时首位补零) i >>>= shift; } while (i != 0); return new String(buf, charPos, (32 - charPos));}
digits数组:
/** * 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'};
阅读全文
1 0
- java 十六进制 Integer 进制转换 源码解读
- Java Integer源码解读
- java源码解读之Integer
- 【转】Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java中十六进制转换 Integer.toHexString()
- Java源码侦探-Integer方法解读
- java.lang.Integer 源码深入解读
- JAVA的进制转换 十进制转换十六进制,十六进制转换十进制
- 完全解读 Java中的 Integer.bitCount(int i)源码
- JAVA Integer进制的转换
- java 使用查表法将十进制转换成十六进制其他进制
- windows下phpunit安装及测试
- Oracle 11g SQL Developer如何配置
- 线程的礼让(Thread.yield())方法
- HUDOJ3038_How Many Answers Are Wrong_带权并查集
- intellij idea keymap 常用快捷键 内容对照
- java 十六进制 Integer 进制转换 源码解读
- 关于linux编码问题
- 听书-中国人为什么看不起中国人-张鸣
- 删除元素_LintCode
- 8-15 最大公共子图
- Java树
- 最大似然估计和贝叶斯估计区别
- spring mvc mongodb web项目jar
- Java中的线程Thread方法之---interrupt()