【问题标题】:Java Convert integer to hex integerJava将整数转换为十六进制整数
【发布时间】:2012-03-08 10:58:48
【问题描述】:

我正在尝试将一个整数从一个整数转换为另一个整数,如果以十六进制打印,它看起来与原始整数相同。

例如:

将 20 转换为 32(即 0x20)

将 54 转换为 84(即 0x54)

【问题讨论】:

  • 我现在才意识到,要真正解决给定的测试用例,就是将 hex 转换为 int,而不是反过来。但是,“Java 将整数转换为十六进制整数”的问题标题导致了许多答案,包括我的答案和最赞成的答案是将 int 转换为十六进制。

标签: java integer hex


【解决方案1】:

最简单的方法是使用Integer.toHexString(int)

【讨论】:

  • 问题是从整数转换为整数,而不是整数到字符串。请再次阅读问题。
  • 这没有意义,你无法控制整数的内部表示。如果你想要十六进制的东西,根据定义,你是在询问 人类可读 表示。
  • @sircodesalot:问题是关于计算具有特定属性 if 打印为十六进制的整数,这是一种纯粹的数学转换。我强烈不同意 Jossef 的观点,即应该根据谷歌结果将答案标记为正确,但根据投票结果,我似乎是少数。
  • @AdamNybäck rekt
【解决方案2】:
public static int convert(int n) {
  return Integer.valueOf(String.valueOf(n), 16);
}

public static void main(String[] args) {
  System.out.println(convert(20));  // 32
  System.out.println(convert(54));  // 84
}

即把原来的数字当作十六进制处理,然后再转换成十进制。

【讨论】:

  • 从 4 个字节转换为字符串,然后从字符串转换为 int,然后转换为十六进制?不,谢谢。
  • 这个解决方案有缺陷。尝试运行以下命令:Integer.valueOf(String.valueOf(-2115381772), 16) - 这将返回 NumberFormatException。
  • 这会将一个以 16 为底的数字转换为以 10 为底的表示形式。Correct answer is below
【解决方案3】:

另一种将int 转换为hex的方法。

String hex = String.format("%X", int);

您可以将大写 X 更改为 x 为小写。

示例:

String.format("%X", 31) 结果1F。

String.format("%X", 32) 结果20。

【讨论】:

  • String hex = String.format("%02X", int); 用于固定长度(两个字符,最后有前导零)。
【解决方案4】:
int orig = 20;
int res = Integer.parseInt(""+orig, 16);

【讨论】:

    【解决方案5】:

    你可以尝试这样的事情(就像你在纸上做的那样):

    public static int solve(int x){
        int y=0;
        int i=0;
    
        while (x>0){
            y+=(x%10)*Math.pow(16,i);
            x/=10;
            i++;
        }
        return y;
    }
    
    public static void main(String args[]){
        System.out.println(solve(20));
        System.out.println(solve(54));
    }
    

    对于您给出的示例,这将计算:0*16^0+2*16^1=32 和 4*16^0+5*16^1=84

    【讨论】:

      【解决方案6】:
      String input = "20";
      int output = Integer.parseInt(input, 16); // 32
      

      【讨论】:

        【解决方案7】:

        如果您只想打印 正 整数的十六进制表示,则以下内容已优化。

        它应该非常快,因为它只使用位操作、ASCII 字符的 utf-8 值和递归以避免在末尾反转 StringBuilder。

        public static void hexa(int num) {
            int m = 0;
            if( (m = num >>> 4) != 0 ) {
                hexa( m );
            }
            System.out.print((char)((m=num & 0x0F)+(m<10 ? 48 : 55)));
        }
        

        【讨论】:

          【解决方案8】:

          只需这样做:

          public static int specialNum(num){
          
              return Integer.parseInt( Integer.toString(num) ,16)
          }
          

          它应该将任何特殊的十进制整数转换成对应的十六进制。

          【讨论】:

            猜你喜欢
            • 2010-10-16
            • 2014-04-16
            • 2016-12-04
            • 1970-01-01
            • 2023-03-13
            • 2015-04-04
            相关资源
            最近更新 更多