Как преобразовать шестнадцатеричное значение в байт в Java

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

Например

Scenario 1десятичное значение - 400 Шестнадцатеричное значение - 0x190 getYLHeight() должно вернуть 90 getYHHeight() должно вернуть 1

Scenario 2десятичное значение - 124 Шестнадцатеричное значение - 0x7C getYLHeight() должно возвращать 7C getYHHeight() должно возвращать 0

Сценарий 1 работает нормально, поскольку шестнадцатеричное значение является целым числом, но в сценарии 2 шестнадцатеричное значение 7C не может быть преобразовано в int

Есть ли лучший способ написать приведенный ниже код для работы в обоих сценариях?

 System.out.println("YL -" + hw.getYLHeight(400));//Hex value - 0x190,should return 90 - WORKS
 System.out.println("YH -" + hw.getYHHeight(400));//Hex value - 0x190,should return 1 - WORKS
 //System.out.println(hw.getYLHeight(124));//Hex value - 0x7C should return 7C - DOES NOT WORK
 //System.out.println(hw.getYHHeight(124));//Hex value - 0x7C should return 0 - DOES NOT WORK



  private byte getYLHeight(int height) {
            int hexNewImageBytesLength = Integer.parseInt(Integer.toHexString(height));
            byte yl = (byte)(hexNewImageBytesLength % 100);
            return yl;
        }

             private byte getYHHeight(int height) {
            int hexNewImageBytesLength = Integer.parseInt(Integer.toHexString(height));
            byte yh = (byte)(hexNewImageBytesLength / 100);
            return yh;
        }

1 ответ

Деление на 100 определенно неверно, должно быть 256, а не 100.

Однако этого делать не нужно.

private static byte getYLHeight(int height) {
    return (byte) height;
}

private static byte getYHHeight(int height) {
    return (byte) (height >>> 8);
}

Чтобы распечатать byte значения в шестнадцатеричном и десятичном формате, используйте printf:

System.out.printf("YL: hex=%1$02x, decimal=%1$d%n", Byte.toUnsignedInt(hw.getYLHeight(400)));
System.out.printf("YH: hex=%1$02x, decimal=%1$d%n", Byte.toUnsignedInt(hw.getYHHeight(400)));

Выход

YL: hex=90, decimal=144
YH: hex=01, decimal=1

ОБНОВИТЬ

Если вы хотите, чтобы методы возвращали String с 2-значным шестнадцатеричным представлением byte значение, сделайте это вместо этого:

private static String getYLHeight(int height) {
    return String.format("%02x", height & 0xFF);
}

private static String getYHHeight(int height) {
    return String.format("%02x", (height >>> 8) & 0xFF);
}

Контрольная работа

System.out.println("YL - " + hw.getYLHeight(400));
System.out.println("YH - " + hw.getYHHeight(400));

Выход

YL - 90
YH - 01
Другие вопросы по тегам