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

Posted

技术标签:

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

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

例如:

将 20 转换为 32(即 0x20)

将 54 转换为 84(即 0x54)

【问题讨论】:

How to get hex value from integer in java的可能重复 我现在才意识到,要真正解决给定的测试用例,就是将 hex 转换为 int,而不是反过来。但是,“Java 将整数转换为十六进制整数”的问题标题导致了许多答案,包括我的答案和最赞成的答案是将 int 转换为十六进制 【参考方案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)

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

【讨论】:

以上是关于Java将整数转换为十六进制整数的主要内容,如果未能解决你的问题,请参考以下文章

将十六进制字符串转换为整数

在Java中从整数转换为二进制时保留整个字节[重复]

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

java实现:整数进制相互转换

在 Groovy 中将整数转换为十六进制字符串

使用显式类型转换将十六进制整数转换为字符?