Как преобразовать шестнадцатеричное значение в байт в 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