Java中的十进制到十六进制转换器

fly*_*els 18 java hex decimal converter

我有一个家庭作业,我需要在十进制,二进制和十六进制之间进行三向转换.我需要帮助的函数是将十进制转换为十六进制.我几乎不了解十六进制,但仍然如何将十进制转换为十六进制.我需要一个接收int dec并返回a 的函数String hex.不幸的是我没有这个功能的任何草稿,我完全迷失了.我只有这个.

  public static String decToHex(int dec)
  {
    String hex = "";


    return hex;
  }
Run Code Online (Sandbox Code Playgroud)

此外,我不能使用像Integer.toHexString()或其他任何东西的预制函数,我需要实际制作算法,否则我就不会学到任何东西.

kol*_*kol 35

一种可能的方案:

import java.lang.StringBuilder;

class Test {
  private static final int sizeOfIntInHalfBytes = 8;
  private static final int numberOfBitsInAHalfByte = 4;
  private static final int halfByte = 0x0F;
  private static final char[] hexDigits = { 
    '0', '1', '2', '3', '4', '5', '6', '7', 
    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
  };

  public static String decToHex(int dec) {
    StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes);
    hexBuilder.setLength(sizeOfIntInHalfBytes);
    for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i)
    {
      int j = dec & halfByte;
      hexBuilder.setCharAt(i, hexDigits[j]);
      dec >>= numberOfBitsInAHalfByte;
    }
    return hexBuilder.toString(); 
  }

  public static void main(String[] args) {
     int dec = 305445566;
     String hex = decToHex(dec);
     System.out.println(hex);       
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1234BABE
Run Code Online (Sandbox Code Playgroud)

无论如何,有一个库方法:

String hex = Integer.toHexString(dec);
Run Code Online (Sandbox Code Playgroud)

  • @StephenC你是对的,但那么这个网站是为了什么?帮助人们做功课很糟糕,但帮助专业程序员完成他们的实际工作却不是吗?每个人都可以为他们的编程问题提供低质量的解决方案.通过收集和选择优质解决方案,SO使世界变得更美好.无论如何,我相信OP可以从我的解决方案中学到很多东西:) (9认同)
  • 现在OP不会从"做"他的作业中学到很多东西.做得好......不! (5认同)
  • @kol - 没有专业人士会*忽略`Integer.toHexString()`并自己实现它.*"无论如何,我确实相信OP可以从我的解决方案中学到很多东西"* - 我相信如果他/她不读它,OP会学到更重要的东西.OP的功课要点学习如何编程.你可以通过编写自己的(开始)丑陋的解决方案来学习如何编程,而不是通过阅读其他人优雅的解决方案. (4认同)

And*_* L. 22

简单:

  public static String decToHex(int dec)
  {
        return Integer.toHexString(dec);
  }
Run Code Online (Sandbox Code Playgroud)

如上所述:Java将整数转换为十六进制整数


Ray*_*non 12

我需要一个接受int dec并返回String hex的函数.

我从http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html找到了一个更优雅的解决方案 .我从原来改变了一点(见编辑)

// precondition:  d is a nonnegative integer
public static String decimal2hex(int d) {
    String digits = "0123456789ABCDEF";
    if (d <= 0) return "0";
    int base = 16;   // flexible to change in any base under 16
    String hex = "";
    while (d > 0) {
        int digit = d % base;              // rightmost digit
        hex = digits.charAt(digit) + hex;  // string concatenation
        d = d / base;
    }
    return hex;
}
Run Code Online (Sandbox Code Playgroud)

免责声明:我在编码面试中使用此算法.我希望这个解决方案不会太受欢迎:)

编辑2016年6月17日:我添加了base变量,以便灵活地更改为任何基础:二进制,八进制,7的基数...
根据评论,这个解决方案是最优雅的,所以我删除了实现Integer.toHexString().

编辑2015年9月4日:我找到了一个更优雅的解决方案http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html