Шестнадцатеричная цифра в двоичную только с 4 цифрами

int[] БУКВЫ = {0x69F99}

Я хочу преобразовать каждую шестнадцатеричную цифру в двоичную, например, 1-ю шестнадцатеричную цифру из 1-й шестнадцатеричной строки (6):

String hex = Integer.toHexString(LETTERS[0]);
String binary = Integer.toBinaryString(hex.charAt(0));
System.out.println(binary);

ВЫВОД: 110110

Если я сделаю это Integer.toBinaryString(6), вывод будет 110, но я хочу что-то с 4 цифрами, возможно ли это?


person Bruno Tavares    schedule 09.11.2013    source источник


Ответы (2)


Я бы просто дополнил строку вашей любимой библиотекой или служебной функцией.

С гуавой:

String binary = Strings.padStart(Integer.toBinaryString(hex.charAt(0)), 4, '0'));

Другим вариантом было бы просто заполнить символьный буфер и отобразить его в виде строки, что, по сути, и является тем, что Реализация OpenJDK делает:

public static String intToBin(int num) {
    char[] buf = new char[4];
    buf[0] = num & 0x1;
    buf[1] = num & 0x2;
    buf[2] = num & 0x4;
    buf[3] = num & 0x8;
    return new String(buf);
}
person Mark Elliot    schedule 09.11.2013

Здесь у вас нет строки - просто массив с одним целым, поэтому вы, по сути, пытаетесь преобразовать это целое число в кусочки, и это можно сделать следующим образом:

int num = 0x12345678;

String bin32 = String.format("%32s", Integer.toBinaryString(num)).replace(" ", "0");
System.out.printf("all 32bits=[%s]\n", bin32);

for(int nibble = 0; nibble < 32; nibble += 4)
{
    System.out.printf("nibble[%d]=[%s]\n", nibble, bin32.subSequence(nibble, nibble+4));
}

дает:

all 32bits=[00010010001101000101011001111000]
nibble[0]=[0001] ie hex digit 1 as bin
nibble[4]=[0010] ie hex digit 2 as bin
nibble[8]=[0011]
nibble[12]=[0100]
nibble[16]=[0101]
nibble[20]=[0110]
nibble[24]=[0111]
nibble[28]=[1000] ie hex digit 8 as bin
person Artur    schedule 09.11.2013