Целое с двумя цифрами шестнадцатеричный в Java - PullRequest
70 голосов
/ 31 декабря 2011

Мне нужно изменить целочисленное значение на двухзначное шестнадцатеричное значение в Java. Есть ли способ для этого. Спасибо

Мое самое большое число будет 63, а самое маленькое будет 0. Я хочу ведущий ноль для небольших значений.

Ответы [ 6 ]

131 голосов
/ 10 октября 2013
String.format("%02X", value);

Если вы используете X вместо x , как предложено aristar , тогда вам не нужно использовать .toUpperCase().

27 голосов
/ 31 декабря 2011
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 .

24 голосов
/ 23 мая 2013
String.format("%02X", (0xFF & value));    
14 голосов
/ 31 декабря 2011

Использование 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();
3 голосов
/ 25 ноября 2012

Если вам просто нужно распечатать их, попробуйте это:

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}
0 голосов
/ 24 мая 2018

Я использую это, чтобы получить строку, представляющую эквивалентное шестнадцатеричное значение целого числа, разделенного пробелом для каждого байта EX: шестнадцатеричное значение 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));
}
...