Как отобразить значение hex/byte в Java

int myInt = 144;
byte myByte = /* Byte conversion of myInt */;

Выход должен быть myByte : 90 (шестнадцатеричное значение 144).

Итак, я сделал:

byte myByte = (byte)myInt;

Я получил вывод myByte : ffffff90.: (

Как я могу избавиться от этих ffffff s?

Ответ 1

byte является подписанным типом. Его значения находятся в диапазоне от -128 до 127; 144 не находится в этом диапазоне. В Java нет беззнакового байтового типа.

Если вы используете Java 8, способ рассматривать это как значение в диапазоне от 0 до 255, это использовать Byte.toUnsignedInt:

String output = String.format("%x", Byte.toUnsignedInt(myByte));

(Я не знаю, как вы отформатировали целое число для шестнадцатеричного вывода. Это не имеет значения.)

Pre-Java 8, самый простой способ -

int byteValue = (int)myByte & 0xFF;
String output = String.format("%x", byteValue);

Но прежде чем вы сделаете это, убедитесь, что вы действительно хотите использовать byte. Скорее всего, вам не нужно. И если вы хотите представить значение 144, вам не следует использовать byte, если вам это не нужно. Просто используйте int.

Ответ 2

Спасибо @ajb и @sumit, я использовал оба ответа,

int myInt = 144;

byte myByte = (byte) myInt;

char myChar = (char) (myByte & 0xFF);

System.out.println("myChar :"+Integer.toHexString(myChar));

о/р,

myChar : 90

Ответ 3

Используйте следующий код:

int myInt = 144;
byte myByte = (byte)myInt;
System.out.println(myByte & 0xFF);

В Java 8 используйте Byte.toUnsignedInt(myByte) как ajb.