Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как перевести число в двоичную или шестнадцатеричную систему

Короткий ответ

У Integer есть готовые методы для двоичной, восьмеричной и шестнадцатеричной записи:

void main() {
    int number = 255;
 
    IO.println(Integer.toBinaryString(number));
    IO.println(Integer.toOctalString(number));
    IO.println(Integer.toHexString(number));
}

Результат:

11111111
377
ff

Любое основание

Integer.toString(n, radix) переводит в систему с любым основанием от 2 до 36:

void main() {
    IO.println(Integer.toString(255, 3));
    IO.println(Integer.toString(35, 36));
}

Результат:

100110
z

Обратно в число

parseInt() со вторым аргументом читает строку в нужной системе:

void main() {
    IO.println(Integer.parseInt("1010", 2));
    IO.println(Integer.parseInt("ff", 16));
}

Результат:

10
255

С ведущими нулями

toBinaryString() не добавляет нули слева. Дополните строку вручную, а для шестнадцатеричной записи используйте HexFormat:

void main() {
    String bits = Integer.toBinaryString(5);
    IO.println("0".repeat(8 - bits.length()) + bits);
 
    IO.println(HexFormat.of().toHexDigits((byte) 10));
    IO.println(HexFormat.of().formatHex(new byte[] {1, 127, -1}));
}

Результат:

00000101
0a
017fff

Частая ошибка

Удивиться отрицательным числам. Методы показывают внутреннее представление числа — дополнительный код из 32 бит:

void main() {
    IO.println(Integer.toBinaryString(-1));
    IO.println(Integer.toHexString(-1));
    IO.println(Integer.toString(-1, 2));
}

Результат:

11111111111111111111111111111111
ffffffff
-1

Если нужен знак минус, используйте Integer.toString(n, 2).

Функции из этого ответа

  • Integer.toBinaryString() — Записывает число в двоичной системе. Рядом — toHexString() и toOctalString().
  • Integer.parseInt() — Превращает строку с целым числом в int.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.