Java将整数转换为十六进制整数

59

我想把一个整数转换成另一个整数,使得它以十六进制的形式打印出来与原始整数相同。

例如:

将20转换为32(即0x20)

将54转换为84(即0x54)


可能是如何在Java中从整数获取十六进制值的重复问题。 - Vadzim
我刚刚意识到,为了解决给定的测试用例,需要将十六进制转换为整数,而不是相反。然而,问题标题中写着“Java将整数转换为十六进制整数”,导致许多答案(包括我的和最受欢迎的答案)都是将整数转换为十六进制。 - Wit
8个回答

257

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


5
问题是将整数转换为整数,而不是将整数转换为字符串。请再次阅读问题。 - Adam Nybäck
40
不过,这并没有意义,你无法控制整数的内部表示。如果你想要以十六进制的形式表示某个东西,那么你本质上是在寻求一种“人类可读”的表示方式。 - sircodesalot
4
这个问题是关于计算一个整数的某种属性,如果以十六进制形式打印出来,这是一种纯粹的数学转换。我强烈不同意Jossef的观点,认为答案是否正确应该基于Google搜索结果而定,但根据投票结果,似乎我处于少数派。 - Pianosaurus
@AdamNybäck被摧毁了 - Sipty

42
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
}

也就是说,将原始数字视为十六进制,并转换为十进制。


3
不用从4字节转换为字符串,再从字符串转换为整数,最后再转换为十六进制吗?不需要,谢谢。 - Ondra Žižka
3
这个解决方案有缺陷。尝试运行以下代码:Integer.valueOf(String.valueOf(-2115381772), 16) - 这会返回一个NumberFormatException异常。 - Lonzak
1
这个函数将一个16进制数转换成10进制数的表示形式。正确答案参见以下链接 - Joaquin Iurchuk

13

整数转换为十六进制的另一种方法。

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

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

示例:

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

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


字符串 hex = String.format("%02X", int); 用于固定长度(两个字符,可能带前导零)。 - qwert2003

7
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。

4
String input = "20";
int output = Integer.parseInt(input, 16); // 32

1
以下内容仅适用于打印正整数的十六进制表示,已进行优化。
由于仅使用位操作、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)));
}

0

就这样简单地做:

public static int specialNum(num){

    return Integer.parseInt( Integer.toString(num) ,16)
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接