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

Ziesemer
источник
3
Хороший хак с нулевым заполнением :)
Гродригес
1
Вы можете использовать ту же технику для больших значений. Если вы хотите заполнить до 2-байтовых значений, вы можете использовать Integer.toHexString (0x10000 | value) .substring (1). Для N шестнадцатеричных цифр вы добавляете N 0 после «1». Конечно, ваше шестнадцатеричное значение должно состоять не более чем из N цифр.
user823981
28
String.format("%02X", (0xFF & value));    
Aristar
источник
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);
}
java4loop
источник
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
Виктор Чой
источник