行业资讯 2025年08月6日
0 收藏 0 点赞 441 浏览 3579 个字
摘要 :

文章目录 1.十进制数和十六进制数的区别 1.1. 不同之处 1.2. 数学转换 2. Java中不同基数的表示 3.1. 使用数字类 3.2. 使用String.format() .3. 使用自定义方法 4. ……




  • 1.十进制数和十六进制数的区别
    • 1.1. 不同之处
    • 1.2. 数学转换
  • 2. Java中不同基数的表示
    • 3.1. 使用数字类
    • 3.2. 使用String.format()
    • .3. 使用自定义方法
  • 4. 将十六进制数转换为十进制数
    • 4.1. 使用数字类
    • 4.2. 使用自定义方法
  • 5. 结论

在本 Java 教程中,我们将了解十进制数和十六进制数之间的区别,以及如何使用内置 Java API 和自定义方法将十进制数与十六进制数相互转换。

1.十进制数和十六进制数的区别

1.1. 不同之处

十进制数使用[0-9]之间的10个符号(即基数10)来表示一个数字,而十六进制数则使用[0-9,A-F]之间的16个符号(即基数16)来表示一个数字。

十进制数的基数是 10,即十进制数的所有位数均以 10 的幂表示。十六进制数的基数是 16,即十六进制数的所有位数均以 16的幂表示。

1.2. 数学转换

由于十六进制数是用16的幂来表示的,因此我们可以将给定的十进制数除以16并听过余数来得到相应的十六进制数。让我们通过一个例子来理解这一点。

让我们一步步将 269(十进制数)转换为十六进制

  1. 以269为被除数,16为除数
  2. 将被除数除以除数并存储余数
  3. 将上述步骤获得的商除以 16 并存储余数。
  4. 重复第三步,直到商为零。
  5. 最终的十六进制数将是存储的余数的进行反向取余。

Java 十进制和为十六进制相互转换

2. Java中不同基数的表示

在 Java 中,所有数字数据类型(int、long、float、double)始终表示十进制格式的值。int/float不可能保存任何二进制、八进制或十六进制格式的数字。

我们可以使用预定义的前缀将二进制、八进制或十六进制值分配给int/long。

int hexNum = 0X10D;     // \'0X\' 或 \'0x\' 开头表示16进制
int octNumber = 01560;   // \'0\' 开头表示10进制

最后,它仍然会被转换为十进制,并且打印该变量将仅以十进制形式打印值。

System.out.println(hexNum);       // 269
System.out.println(octNumber); // 880

因此,我们永远无法获得int或其他十进制类型数据类型中任何数字的十六进制、八进制或二进制表示,因此我们需要以String格式表示十六进制/八进制/二进制数字。

3.1. 使用数字类

所有 Java 数字类都提供内置方法来执行从十进制数到等效十六进制数的转换。让我们列出这些方法:

对于Integer 和Long类:

  • Integer.toString(num, radix);
  • Integer.toHexString(num);
  • Long.toString(num, radix);
  • Long.toHexString(num);
  • BigInteger.toString(Radix);

对于Float和Double类:

  • Float.toHexString(num);
  • Double.toHexString(num);

在toString()方法中,我们传递基数(16 表示十六进制)以及要转换的数字。

int number = 269;

String hex = Integer.toString(number, 16);   // \'10d\'

toHexString ()方法直接将给定的数字转换为十六进制形式。

double number = 333.44d;

String hex = Double.toHexString(number);  // \'0x1.4d70a3d70a3d7p8\'

BigInteger类还提供了用于相同目的的toString (radix)方法。

BigInteger number = new BigInteger(\"269\");

String hex = number.toString(16);   // \'10d\'

3.2. 使用String.format()

String类有一个重载的format()方法,该方法接受格式说明符。表示十六进制数字的格式是%x。该方法可用于将十进制整数转换为十六进制字符串。

int number = 269;

String hex = String.format(\"%x\", number);   // \'10d\'

.3. 使用自定义方法

我们还可以为本文第一部分中讨论的算法创建自定义方法和代码。

  • 执行十进制数的长除法。
  • 取除法的余数部分。
  • 根据余数得到十六进制字符。
  • 将标记添加到结果中。
  • 重复这些步骤,直到商结果为0。
public static String convertToHex(int number) {

  if (number <= 0) {
    return \"0\";
  }

  int remainder;
  StringBuilder result = new StringBuilder();
  String tokens = \"0123456789ABCDEF\";
  
  while (number > 0) {
    remainder = number % 16;
    result.insert(0, tokens.charAt(remainder));
    number = number / 16;
  }
  return result.toString();
}

现在我们可以使用这个方法在Java中进行十进制到十六进制的转换。

String hex = convertToHex(269);
System.out.println(hex);  // \'10D\'

4. 将十六进制数转换为十进制数

4.1. 使用数字类

如果转换为Integer和Long类型,则从十六进制字符串转换为 Java Number 类型很容易。对于此类转换有直接的 API 支持:

  • Integer.parseInt(hex, radix);
  • Integer.valueOf(hex, radix);
  • Integer.decode(hex);
  • Long.parseLong(hex, radix);
  • Long.valueOf(hex, radix);
  • Long.decode(hex);
  • new BigInteger(hex, radix);

以下示例使用定义的方法将十六进制转换为整数类型。对于十六进制到长整型的转换也可以进行同样的操作。

String hex = \"10D\";

int decimal = Integer.parseInt(hex,16);

//or

int decimal = Integer.valueOf(hex,16);

//or

int decimal = Integer.decode(\"Ox\" + hex);

BigInteger类还提供了一个构造函数new BigInteger(hex, radix)来实现相同的目的。

BigInteger decimal = new BigInteger(\"10d\",16);

System.out.println(decimal); // 269

将十六进制转换为浮点数(float和double)并不简单。我们需要执行以下步骤:

  • 将十六进制字符串解析为整数
  • 使用Float.intBitsToFloat()Double.longBitsToDouble()将整数解释为浮点或双精度值。
String myString = \"BF800000\";
Long i = Long.parseLong(myString, 16);
Float f = Float.intBitsToFloat(i.intValue());

//converted float value
System.out.println(f);

//Convert the float back to hex and verify
System.out.println(Integer.toHexString(Float.floatToIntBits(f)));

程序输出:

-1.0
bf800000

4.2. 使用自定义方法

要使用原始方法将十六进制字符串转换为十进制整数,我们将使用以下简单算法。

  • 查找对应的十六进制标记的十进制数
  • 首先,将要在其中添加此十进制标记的变量乘以 16,然后添加十进制数。
  • 重复这些步骤,直到十六进制字符串的最后一个标记。
public static int convertHexToDecimal(String hex) {

  String tokens = \"0123456789ABCDEF\";
  hex = hex.toUpperCase();
  int result = 0;

  for (int i = 0; i < hex.length(); i++) {

    int n = tokens.indexOf(hex.charAt(i));
    result = result * 16 + n;
  }
  return result;
}

让我们测试一下该方法。

System.out.println(convertHexToDecimal(\"10D\"));    //269

5. 结论

在本Java 数据类型教程中,我们了解了十进制数和十六进制数之间的区别,以及使用 API 和自定义方法将十进制数转换为十六进制数。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9041.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号