Целое число с двухзначным шестнадцатеричным кодом в 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.