Java中整数到两位数的十六进制


82

我需要在Java中将整数值更改为两位数的十六进制值。谢谢

我的最大数字将是63,最小的数字将是0。我希望小数值的前导零。


您需要打印吗?您需要将其转换为字符串?
艾哈迈德·马苏德

我将以两位十六进制的形式写入文件
Salih Erikci 2011年

您至少检查过Integer Javadoc吗?您打算如何将12345656转换为两位数的十六进制值?
JB Nizet

Answers:


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

如果使用X而不是x aristar的建议,则无需使用.toUpperCase()


8
这是目前最好的答案。
David J.

1
同意这一点比其他任何一个要好得多。完美运作。我只建议对传递给该方法的参数进行更多描述。我必须查找是否将值作为整数或十六进制字符串传递。
JRSofty 2014年

31
Integer.toHexString(42);

Javadoc:http : //docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

请注意,这可能会给您超过2位数字!(整数为4个字节,因此您可能会取回8个字符。)

只要您绝对确定只处理单字节值(255或更小),这里就有一点技巧可以填充您的内容:

Integer.toHexString(0x100 | 42).substring(1)

Java中使用零填充Left填充整数(非十进制格式)的更多(更好)解决方案。


3
不错的零填充技巧:)
Grodriguez 2014年

1
您可以对更大的值使用相同的技术。如果要填充最多2个字节的值,则可以执行Integer.toHexString(0x10000 | value).substring(1)。对于N个十六进制数字,请在“ 1”之后附加N 0。当然,您的十六进制值不能超过N个数字。
user823981

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

7
有人可以解释为什么用0xFF这样做吗?这就是为什么SO答案不应该只是代码的原因
Stealth Rabbi

4
OxFF和(字节)值只是将有符号字节转换为无符号字节。(int)-1 = 0xFFFFFFFF,(int)(-1&0xFf)= 0xFF
aristar

在这种情况下,由于格式为“%02X”,因此不需要按位和0xFF。
Freek de Bruijn 2015年

1
%02X说明符指定至少两位数字。如果您只需要两位数字(丢弃高位),则需要按位与。
plugwash

很高兴知道,谢谢您提供的其他信息!
tryp

14

使用Integer.toHexString()。如果只用一位数字结尾,请不要忘记用前导零填充。如果您的整数大于255,您将获得2位以上的数字。

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实际上是一种改进吗?pastebin.com/KyS06JMz
13年

4

如果只需要打印它们,请尝试以下操作:

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

0

我用它来获取一个字符串,该字符串表示每个字节EX的整数等效十六进制值,该空格之间用空格分隔 :4个字节中260的十六进制值= 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));
}

0

根据GabrielOshiro的说法,如果要将整数格式设置为长度8,请尝试以下操作

String.format("0x%08X", 20) //print 0x00000014
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.