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

news/2025/2/1 23:47:18 标签: java, python, 开发语言

在 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.niftyadmin.cn/n/5839640.html

相关文章

MySQL知识点总结(十一)

如何查看 InnoDB 表所占用的实际存储空间大小? 可以查询 INFORMATION_SCHEMA.FILES 视图,其中包含有 InnoDB 表空间的磁盘大小信息。 也可以在文件系统直接查看 .ibd 文件的大小,但仅适用于单表文件包空间。 谈谈对 MySQL 数据库进行纵…

怎么在origin中把许多画好的图合并到一张图中,并且可以任意指定这些图排列的方式

例如我现在有四个独立的.opju文件,都长这样: 把他们合到一起,成一张图 首先打开origin,文件,打开,找到文件所在位置 选中要组合的子图,点击右小角的打开,此时可能你的界面只显示出来…

网络安全实战指南:攻防技术与防御策略

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 随着数字化转型的加速,网络安全已成为各行业不可忽视的重要领域。从数据泄露到勒索软件攻击,网络…

【MyDB】4-VersionManager 之 3-死锁及超时检测

【MyDB】4-VersionManager 之 3-死锁及超时检测 死锁及超时检测案例背景LockTable锁请求与等待管理 addvm调用addputIntoList,isInList,removeFromList 死锁检测 hasDeadLock方法资源释放与重分配 参考资料 死锁及超时检测 本章涉及代码:top/…

K8S ReplicaSet 控制器

一、理论介绍 今天我们来实验 ReplicaSet 控制器(也叫工作负载)。官网描述如下: 1、是什么? ReplicaSet 副本集, 维护一组稳定的副本 Pod 集合。 2、为什么需要? 解决 pod 被删除了,不能自我恢…

Redis|前言

文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程: 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…

详解python的修饰符

Python 中的修饰符(Decorator)是一种用于修改或扩展函数或类行为的工具。它们本质上是一个函数,接受另一个函数或类作为参数,并返回一个新的函数或类。修饰符通常用于在不修改原函数或类代码的情况下,添加额外的功能。…