Целое число с двухзначным шестнадцатеричным кодом в Java


82

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

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


Вам нужно это распечатать? вам нужно превратить его в строку?
— Ахмед Масуд

Я запишу в файл как двузначное шестнадцатеричное
— Салих Эрикчи

Вы хотя бы проверили целочисленный javadoc? Как вы планируете преобразовать 12345656 в двузначное шестнадцатеричное значение?
— JB Nizet

Ответы:


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

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


8
Это лучший ответ на данный момент.
— Дэвид Дж.

1
Согласен, этот намного лучше, чем любой другой. Работает отлично. Единственное, что я бы посоветовал, - это еще немного описать параметры, передаваемые методу. Мне приходилось искать, передавал ли я значение как целое число или как шестнадцатеричную строку.
— JRSofty

31
Integer.toHexString(42);

Документация Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

Обратите внимание, что это может дать вам более двух цифр! (Целое число составляет 4 байта, поэтому вы потенциально можете вернуть 8 символов.)

Вот небольшой прием, чтобы получить заполнение, если вы абсолютно уверены, что имеете дело только с однобайтовыми значениями (255 или меньше):

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

Множество других (и лучших) решений с левым заполнением целых чисел (недесятичный формат) нулями в Java .


3
Хороший хак с нулевым заполнением :)
— Гродригес

1
Вы можете использовать ту же технику для больших значений. Если вы хотите заполнить до 2-байтовых значений, вы можете использовать Integer.toHexString (0x10000 | value) .substring (1). Для N шестнадцатеричных цифр вы добавляете N 0 после «1». Конечно, ваше шестнадцатеричное значение должно состоять не более чем из N цифр.
— user823981

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

7
Может кто-нибудь объяснить, почему это делается побитно и с 0xFF? Вот почему ответы на SO не должны быть просто кодом
— Stealth Rabbi

4
Значение OxFF & (byte) просто преобразует знаковый байт в беззнаковый. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF
— aristar

В этом случае побитовое и с 0xFF не требуется из-за формата "% 02X".
— Freek de Bruijn

1
Спецификатор% 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улучшений? pastebin.com/KyS06JMz
— только что изучаю 02

4

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

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

1

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

0

По словам Габриэля Оширо, если вы хотите форматировать целое число длиной 8, попробуйте это

String.format("0x%08X", 20) //print 0x00000014
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.