Я использую ниже код для преобразования байта в строку:
System.out.println("string " + Byte.toString((byte)0x63));
Почему он печатает "string 99". Как изменить, чтобы он печатал строку "c"?
Я использую ниже код для преобразования байта в строку:
System.out.println("string " + Byte.toString((byte)0x63));
Почему он печатает "string 99". Как изменить, чтобы он печатал строку "c"?
Строка ctor подходит для этого преобразования:
System.out.println("string " + new String(new byte[] {0x63}));
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII"));
Обратите внимание, что преобразование байтов в строки всегда связано с кодировкой. Если вы не укажете его, вы будете использовать стандартную кодировку платформы, а это значит, что код может сломаться при работе в разных средах.
Используйте char вместо байта:
System.out.println("string " + (char)0x63);
Или, если вы хотите быть пуританским Unicode, вы используете codepoints:
System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1));
И если вам нравится старая версия US-ASCII "каждый байт - символ":
System.out.println("string " + new String(new byte[]{ (byte)0x63 },
StandardCharsets.US_ASCII));
Избегайте использования конструктора String(byte[])
, рекомендованного в других ответах; он полагается на кодировку по умолчанию. Обстоятельства могут возникать там, где 0x63
фактически не является символом c.
Вы можете использовать printf
:
System.out.printf("string %c\n", 0x63);
Вы также можете создать строку с таким форматированием, используя String#format
:
String s = String.format("string %c", 0x63);
вы можете использовать
символ , эквивалентный 0x63, равен 'c', но эквивалентный ему байт составляет 99
System.out.println("byte "+(char)0x63);
Вам нужно построить новую строку из массива байтов. Первым элементом вашего byteArray
должен быть 0x63
. Если вы хотите добавить больше букв, сделайте byteArray
дольше и добавьте их к следующим индексам.
byte[] byteArray = new byte[1];
byteArray[0] = 0x63;
try {
System.out.println("string " + new String(byteArray, "US-ASCII"));
} catch (UnsupportedEncodingException e) {
// TODO: Handle exception.
e.printStackTrace();
}
Обратите внимание, что указание кодировки в конечном итоге вызовет UnsupportedEncodingException
, и вы должны соответствующим образом обработать это.
Если это один байт, просто введите byte
в char
, и он должен работать нормально, т.е. предоставить объект char
, соответствующий значению кодового слова данного байта. Если нет, используйте конструктор String
, как указано в другом месте.
char ch = (char)0x63;
System.out.println(ch);
String str = "0x63";
int temp = Integer.parseInt(str.substring(2, 4), 16);
char c = (char)temp;
System.out.print(c);