Java中将整数转换为两位十六进制的方法

95

我需要在Java中将整数值更改为2位十六进制值。是否有任何方法可以实现这一点。 谢谢

我的最大数字将是63,最小数字将是0。 我想对小值添加前导零。


你需要打印它吗?你需要将它转换为字符串吗? - Ahmed Masud
我将以两位十六进制数的形式写入文件。 - Salih Erikci
你至少查看过 Integer javadoc 吗?你打算如何将 12345656 转换为两位十六进制值? - JB Nizet
7个回答

171
String.format("%02X", value);

如果您使用X而不是x如aristar建议的那样, 那么您就不需要使用.toUpperCase()

8
目前这是最好的答案。 - David J.
1
同意,这个比其他任何一个都好。它完美地工作了。唯一我想建议的是,在方法中更详细地描述传递的参数。我不得不去查看我传递的是整数还是十六进制字符串。 - JRSofty
很不幸,这对字符串无效,您必须使用一些计算技巧。 - mrek
1
我知道这个方法很老,但使用它进行转换非常慢。如果你正在循环中使用它,我建议不要使用String.format。 - Elec0

33

3
不错的零填充技巧 :) - Grodriguez
1
您可以使用相同的技巧处理更大的值。如果您想要填充最多2字节的值,可以使用Integer.toHexString(0x10000 | value).substring(1)。对于N个十六进制数字,您需要在“1”后附加N个0。当然,您的十六进制值不能超过N位数。 - user823981

31
String.format("%02X", (0xFF & value));    

8
为什么要使用0xFF进行位与运算?有人能解释一下吗?这就是为什么SO上的答案不应该只给出代码的原因。 - Stealth Rabbi
4
OxFF & (byte)value 将有符号的 byte 转换为无符号的。 (int)-1 = 0xFFFFFFFF,(int)(-1 & 0xFf) = 0xFF。 - aristar
在这种情况下,由于“%02X”格式,与0xFF的按位与操作是不必要的。 - Freek de Bruijn
2
%02X 格式说明符指定至少两个数字。如果您只想要两个数字(丢弃高位),则需要按位与。 - plugwash
很好了解,感谢这个额外的信息! - tryp

14

使用Integer.toHexString()。如果只有一位数字,请不要忘记在前面添加一个零。如果您的整数大于255,则会获得两个以上的数字。

StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
    sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();

2
使用 StringBuilder 真的是一种改进吗?http://pastebin.com/KyS06JMz - just lerning

4
如果您只需要打印它们,可以尝试以下方法:
for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

2
根据GabrielOshiro的说法,如果你想将整数格式化为长度为8,可以尝试以下方法。
String.format("0x%08X", 20) //print 0x00000014

1
我使用这个来获取一个整数的十六进制等效值的字符串,每个字节用空格分隔。 例如:260的4个字节的十六进制值为00 00 01 04
    public static String getHexValString(Integer val, int bytePercision){
    StringBuilder sb = new StringBuilder();
    sb.append(Integer.toHexString(val));

    while(sb.length() < bytePercision*2){
        sb.insert(0,'0');// pad with leading zero
    }

    int l = sb.length(); // total string length before spaces
    int r = l/2; //num of rquired iterations

    for (int i=1; i < r;  i++){
        int x = l-(2*i); //space postion
        sb.insert(x, ' ');
    }
    return sb.toString().toUpperCase();         
}

public static void main(String []args){
    System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}

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