Как преобразовать шестнадцатеричное значение в байт в java - PullRequest
0 голосов
/ 22 апреля 2020

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

Например,

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

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

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

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

 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 Ответ

0 голосов
/ 22 апреля 2020

Делить на 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-ди git значения 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);
}

Test

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

Выход

YL - 90
YH - 01
...