当前位置: 首页 > article >正文

Java 16进制 10进制 2进制数 相互的转换

在 Java 中,进行进制之间的转换时,除了功能的正确性外,效率和安全性也很重要。为了确保高效和相对安全的转换,我们通常需要考虑:

  1. 性能:使用内置的转换方法,如 Integer.toHexString()Integer.toBinaryString() 等,通常比手动实现转换更高效。
  2. 安全性:避免溢出和处理负数或符号位的问题。

以下是针对 16进制、10进制和2进制数的相互转换 的高效且相对安全的方法。


1. 十六进制(Hex) ↔ 十进制(Decimal)

十六进制到十进制: 使用 Integer.parseInt() 方法将十六进制字符串解析为十进制数字。

十进制到十六进制: 使用 Integer.toHexString() 方法将十进制数字转换为十六进制字符串。

示例代码:
public class BaseConversion {
    public static void main(String[] args) {
        // 十六进制到十进制
        String hex = "1A3F";
        int decimal = Integer.parseInt(hex, 16);  // 使用 parseInt 方法将十六进制转为十进制
        System.out.println("Hex to Decimal: " + decimal);

        // 十进制到十六进制
        int decimalNum = 6703;
        String hexString = Integer.toHexString(decimalNum);  // 使用 toHexString 方法将十进制转为十六进制
        System.out.println("Decimal to Hex: " + hexString.toUpperCase());  // 输出大写的十六进制
    }
}
输出:
Hex to Decimal: 6703
Decimal to Hex: 1A3F

2. 十六进制(Hex) ↔ 二进制(Binary)

十六进制到二进制: 首先将十六进制字符串转换为十进制,然后再转换为二进制。

二进制到十六进制: 首先将二进制字符串转换为十进制,然后再转换为十六进制。

示例代码:
public class BaseConversion {
    public static void main(String[] args) {
        // 十六进制到二进制
        String hex = "1A3F";
        int decimalFromHex = Integer.parseInt(hex, 16);
        String binaryFromHex = Integer.toBinaryString(decimalFromHex);  // 十进制转二进制
        System.out.println("Hex to Binary: " + binaryFromHex);

        // 二进制到十六进制
        String binary = "1101000111111";
        int decimalFromBinary = Integer.parseInt(binary, 2);  // 二进制转十进制
        String hexFromBinary = Integer.toHexString(decimalFromBinary);  // 十进制转十六进制
        System.out.println("Binary to Hex: " + hexFromBinary.toUpperCase());  // 输出大写的十六进制
    }
}
输出:
Hex to Binary: 1101000111111
Binary to Hex: 1A3F

3. 十进制(Decimal) ↔ 二进制(Binary)

十进制到二进制: 使用 Integer.toBinaryString() 方法将十进制转换为二进制。

二进制到十进制: 使用 Integer.parseInt() 方法将二进制字符串解析为十进制数字。

示例代码:
public class BaseConversion {
    public static void main(String[] args) {
        // 十进制到二进制
        int decimal = 6703;
        String binary = Integer.toBinaryString(decimal);  // 十进制转二进制
        System.out.println("Decimal to Binary: " + binary);

        // 二进制到十进制
        String binaryStr = "1101000111111";
        int decimalFromBinary = Integer.parseInt(binaryStr, 2);  // 二进制转十进制
        System.out.println("Binary to Decimal: " + decimalFromBinary);
    }
}
输出:
Decimal to Binary: 1101000111111
Binary to Decimal: 6703

4. 高效与安全性考虑

  1. 高效性
    • 使用 Integer.parseInt()Integer.toBinaryString() 等标准库方法,通常比手动实现进制转换更高效。
    • 不需要对负数特别处理,因为 parseInt()toBinaryString() 默认已经处理了符号位。
  2. 安全性
    • 防止溢出Integer.parseInt() 方法的上限是 Integer.MAX_VALUE(即 2147483647)。如果你需要更大的数字,可以使用 Long.parseLong()BigInteger
    • 避免负数问题Integer.toBinaryString()Integer.toHexString()Integer.toString() 等方法都已自动处理负数的转换,适用于常见的整数类型。
    • 使用大数字:对于超过 32 位的数字(比如 Long 类型或更大的数字),可以使用 LongBigInteger 来处理,BigInteger 可以支持任意大小的整数。
示例代码(使用 BigInteger 处理大数字):
import java.math.BigInteger;

public class BaseConversion {
    public static void main(String[] args) {
        // BigInteger 适用于大数字转换
        String largeHex = "A3B2C4D5E6F7";
        BigInteger bigDecimal = new BigInteger(largeHex, 16);  // 十六进制转大整数
        System.out.println("Large Hex to Decimal: " + bigDecimal);

        // 大整数转十六进制
        String bigHex = bigDecimal.toString(16);  // 转回十六进制
        System.out.println("Large Decimal to Hex: " + bigHex.toUpperCase());
    }
}
输出:
Large Hex to Decimal: 181477716850295
Large Decimal to Hex: A3B2C4D5E6F7

总结:

  • 十六进制 ↔ 十进制 使用 Integer.parseInt()Integer.toHexString()
  • 十六进制 ↔ 二进制 使用 Integer.toBinaryString()Integer.parseInt()
  • 十进制 ↔ 二进制 使用 Integer.toBinaryString()Integer.parseInt()
  • 对于大数字,使用 BigInteger 类来处理超过 32 位的进制转换。

这种方法是 高效 的,并且通过 Java 内置的类,已经相对安全地处理了符号和溢出的问题。

以下是16进制、10进制和2进制之间的转换表格。这个表格展示了常见的数值在这三种进制之间的相互转换。

16进制、10进制、2进制数转换表

16进制10进制2进制
000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
A101010
B111011
C121100
D131101
E141110
F151111
101610000
111710001
121810010
131910011
142010100
152110101
162210110
172310111
182411000
192511001
1A2611010
1B2711011
1C2811100
1D2911101
1E3011110
1F3111111
2032100000
2133100001
2234100010
2335100011
2436100100
2537100101
2638100110
2739100111
2840101000
2941101001
2A42101010
2B43101011
2C44101100
2D45101101
2E46101110
2F47101111
3048110000
3149110001
3250110010
3351110011
3452110100
3553110101
3654110110
3755110111
3856111000
3957111001
3A58111010
3B59111011
3C60111100
3D61111101
3E62111110
3F63111111


http://www.kler.cn/a/527910.html

相关文章:

  • 【数据结构】初识链表
  • matlab的.mat文件怎么把表格中的值全部设置为空
  • HTML DOM 对象
  • 智能汽车网络安全威胁报告
  • 神经网络和深度学习
  • Ubuntu20.04 磁盘空间扩展教程
  • 数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)
  • 通过.yml文件创建环境
  • 反射、枚举以及lambda表达式
  • Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
  • 想品客老师的第九天:原型和继承
  • Nginx代理
  • 面试回顾——1
  • JAVA实战开源项目:房屋租赁系统(Vue+SpringBoot) 附源码
  • Visual RAG: Expanding MLLM visual knowledge without fine-tuning 论文简介
  • 【文件整理】文件命名、存放、分类建议
  • JDK的动态代理:深入理解与实践
  • keil5如何添加.h 和.c文件,以及如何添加文件夹
  • 安装Maven(安装包+步骤)
  • 扶摇计划--从失业的寒冬,慢慢的走出来
  • PID 温控设计(基于 STC51)
  • 网络工程师 (9)文件管理
  • JavaScript闭包深入剖析:性能剖析与优化技巧
  • Windows系统本地部署deepseek 更改目录
  • 【C++语言】卡码网语言基础课系列----6. 数组的倒序与隔位输出
  • JMeter中常见的四种参数化实现方式是什么?_file test_params