Я ищу решение для вставки специальных 1-байтовых символов в строку java, например 0xFE, 0xFF ( > 127).
Мне нужно использовать String вместо байтового массива, потому что методу класса нужен только тип String.
Что мне нужно в String = {0x07 0xAA 0x03 FF}. Да, это специальные символы, которые используются для управления устройством.
И я попытался использовать String constructur как:
byte[] arr = {0x07, (byte) 0xAA, 0x03, (byte) FF};
String s = new String(arr, "UTF-8");
// utf-8 использует для 1-байтовых символов, я также пробовал ascII, но результат был тот же
Все работает до значения 127 (dec) char в массиве, но после этого дает странный результат, например, 1 или 2 дополнительных байта в String, конечно, это произошло из-за того, что тип байта имеет максимальное значение 127. Но как исправить эту ситуацию ?? Нужна помощь.
Как я понял, я не могу добавить char [] в конструктор String
У String действительно есть конструктор, который принимает массив char. Это то, что вы искали?
Используйте escape-символы Unicode: String s = "\u0007\u00AA\u0003\u00FF";
Да, я имел в виду, что откуда мне знать, что тип char занимает 2 байта, верно? Итак, char 0xFF будет добавлен к строке, например 0x00 0xFF, .. но мне нужен 1 байт




Одна часть вашего вопроса неверна. UTF-8 хранит только печатаемые символы ASCII в диапазоне [32,126] как отдельные байты (кроме этого - 2 или даже 3 байта на символ), даже если кодировки обычно имеют длину 256 байтов. Поскольку в Java все строки автоматически сохраняются и печатаются как UTF-8 по умолчанию, они будут оставаться более 1 байта при печати.
Что вам нужно, так это кодировка, которая сохраняет все первые байты [1,256] как отдельные байты при доступе к байтам. Например, с вашим текущим кодом:
byte[] arr = {0x07, (byte) 0xAA, 0x03, (byte) 0xFF};
String s = new String(arr, "UTF-8");
System.out.println(s.getBytes().length); // This prints 8
System.out.println(s.getBytes("UTF-8").length); // This prints 8 as well (since the default is UTF-8)
System.out.println(s.getBytes("Windows-1252").length); // This prints 4
ISO-8859-1 (также известный как Кодовая страница 1252 или Windows-1252) или Кодовая страница 437 - две довольно известные кодировки.
Хорошо, с вашей помощью я нашел решение! Проблема в charSet !!! нужен ISO-8859-1
char [] arr = {0x07, 0xAA, 0x03, 0xFF}; spt.writeString (новая строка (arr), «ISO-8859-1»); результат от portMonitor IRP_MJ_WRITE Serial0 SUCCESS Длина 4: 07 AA 03 FF
@ Кост Рад, что смог помочь. :)
«Как я понял, я не могу добавить char [] в конструктор String» Что вы имеете в виду?