![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 27.11.2021
Сообщений: 3
|
![]()
Привет ребята.
Очень нужна помощь в вопросе. 1. Я понимаю разницу между представлением байта и его фактическим двоичным значением потому пожалуйста учтите это) 2. Для исключения путаницы я буду перед типом byte[] писать принадлежность языку программирования. например (JAVA)byte[] означает массив из данных размером в 1 байт но значением -128...127, или (C)byte[] что означает массив данных размером в 1 байт и значением 0...255. Вот в чем проблема: У меня есть метод обратного вызова который на вход получает поток данных (обычно 1 или 2 байта) типом byte[]. Код:
исходя из кода возможно ясно что поток данных конвертируется в тип (JAVA)String с кодировкой UTF_8 (на сколько мне извесно по стандарту юзается юникод). Дале эта строка передается обьектом в обработчик handler: Код:
Все это работает без проблем до тех пор пока передаются данные меньше чем 127. Но мне этот вариант не подходит. Предпологается что входящие параметры могут быть больше чем 127 а концом сообщения переданного через usb - символ ASCII с значением 255. Замечания: 1. когда я передаю параметры не меняя символ конца сообщения на 255 но среди параметров есть значения выше чем 127 то на екране я вижу 65533 при чем без разницы какое оно. Главное чтоб было больше чем 127. И я думаю это связано с (JAVA)byte[]. 2. Если я в полученной строке пытаюсь найти символ (char)255 как конец сообщения - оно не обнаруживается. Я пробовал уже множество вариантов танца с бубном. например это: Код:
Да я вообще embedded разработчик и мне дали задачу воскресить приложение и адаптировать его под современные требования. Потому знания JAVA у меня не идеальны. Я потратил 2 дня на поиски решения этой головной боли и даже написал автору этой библиотеки чтоб узнать можно ли изменить тип входящих данных (но он не отвечает). Добавлю так же скрин "логов" прихлодящих данных(Зеленого цвета строка из символов), их отображение в нижней части екрана. В общем я буду очень благодарен за любую помощь! ![]() С уважением! |
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
А в какой кодировке хранятся данные в потоке? Там точно строки, а не, например, многобайтовые числа?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 27.11.2021
Сообщений: 3
|
![]()
Я заметил вот что.. пока на форум не напишешь, ответ ненайдешь)
Я решил задачку иследовав ее по винтику. Вот о чем я оказывается не знал: Все символы и строки закодированы в юникоде. Один char это не 1 байт как заведено во всех нормальных языках программирования. отрицательный byte становится максимальным двохбайтным значением 65533 и из за этого все что выше 126 - некорректно ну и конечно же теперь новый символ имеет свое значение по юникоде 65533 Решение оказалось достаточно банальным... просто не применять кодировку при создании строки. Все символы стандартной ASCII (печатные) совпадают с кодировкой UTF_16 и мне это подходит. Вот собственно как я поступил: Код:
handleMessage: Код:
Считаеттся что вопрос закрыт! Последний раз редактировалось vlobunet; 27.11.2021 в 18:47. Причина: добавил текста... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с byte[] | КолиК29 | C# (си шарп) | 3 | 29.11.2021 17:18 |
IntPtr в byte[] | DronLee | Общие вопросы .NET | 1 | 26.06.2015 16:22 |
byte to int | Миша52 | Помощь студентам | 0 | 31.01.2015 22:14 |
Тип byte[] в java | Стремящийся | Общие вопросы по Java, Java SE, Kotlin | 1 | 07.06.2012 13:08 |
unsigned char в array<Byte> | Artemprodigy | Visual C++ | 0 | 23.03.2011 11:19 |