Java的进制转换操作(十进制、十六进制、二进制)

2014-05-06 17:34 吴文付

最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。

这里整理一下。具体的计划为:封装一个转换类,一个测试类。

1、十进制 转 十六进制 二进制:

 

复制代码
//调用java自带的api
        //测试十进制转16进制 2进制
        System.out.println("十进制10转16进制为"+Integer.toHexString(10));
        System.out.println("十进制10转二进制为"+Integer.toBinaryString(10));
十进制转换二进制十六进制
复制代码

2、十进制字符串转 16进制 转 2进制 

将字符串转为 十进制后参考方法1

System.out.println("字符串10转16进制为"+Integer.toHexString(Integer.parseInt("10")));
        System.out.println("字符串10转二进制为"+Integer.toBinaryString(Integer.parseInt("10")));
十进制字符串转16转2

 

3、16转2转10

 

 

 

复制代码
 String h = "10000";
         BigInteger srch = new BigInteger(h, 16);
         
         System.out.println("十六进制字符串10000转为10进制后为:"+srch.toString());//转换为10进制并输出结果 
         System.out.println("十六进制字符串10000转为2进制后为"+Integer.toBinaryString(Integer.parseInt(srch.toString())));
        
十六转2转10
复制代码

2014-05-07 15:18 修正:

上面的转换使用了BigInteger对象,也可以不使用。

如下方式也可以

16-》2 

可以如下:Integer.toBinaryString(Integer.parseInt("0xAA",16))

 

16-10:

Integer.parseInt("0xAA",16)

 

 

4、2转10转16

复制代码
    String b = "10000";
         BigInteger srcb= new BigInteger(b,2);//转换为BigInteger类型 
         System.out.println("二进制字符串10000转为10进制后为:"+srcb);//转换为10进制并输出结果 
         System.out.println("二进制字符串10000转为16进制后为"+Integer.toHexString(Integer.parseInt(srcb.toString())));
        
2转10转16
复制代码

5、字节数组转 16进制字符串

复制代码
 public static String BinaryToHexString(byte[] bytes){
         
           String hexStr =  "0123456789ABCDEF";
         String result = "";  
            String hex = "";  
            for(int i=0;i<bytes.length;i++){  
                //字节高4位  
                hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));  
                //字节低4位  
                hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));  
                result +=hex+" ";  //这里可以去掉空格,或者添加0x标识符。
            }  
            return result;  
     }
byte[] 转16字符串
复制代码

6、16进制字符串转 字节数组

复制代码
 public static byte[] HexStrToBytes(String str)
     {
         //如果字符串长度不为偶数,则追加0
         if(str.length() % 2 !=0){
             str = "0"+str;
         }
         
         byte[] b = new byte[str.length() / 2];
         byte c1, c2;
         for (int y = 0, x = 0; x < str.length(); ++y, ++x)
         {
             c1 = (byte)str.charAt(x);
             if (c1 > 0x60) c1 -= 0x57;
             else if (c1 > 0x40) c1 -= 0x37;
             else c1 -= 0x30;
             c2 = (byte)str.charAt(++x);
             if (c2 > 0x60) c2 -= 0x57;
             else if (c2 > 0x40) c2 -= 0x37;
             else c2 -= 0x30;
             b[y] = (byte)((c1 << 4) + c2);
         }
         return b;
     }
     
16字符串转字节数组
复制代码

 

 

 

 

2014-05-06 18:49 完成测试。

 

直接上代码吧。注释已经很清楚了

 

工程地址:http://download.csdn.net/detail/douniwan123654/7305195

 

测试后截图:

 

 

 

 

posted on   jsRunner  阅读(22405)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示