0x9B (155decimal) специальный управляющий символ? Почему это отсутствует в таблицах ASCII?

Я работаю над встроенной системой, и у меня есть драмы, заставляющие ее отправить определенный блок данных через последовательный порт. Я сузил его и нашел, что, если 0x9B присутствует в сообщении, он повреждает сообщение.

Таким образом, я затем ищу 0x9b (155) на http://www.asciitable.com/, и он отсутствует! Не то, что причудливое совпадение!

Какие-либо идеи, действительно ли это - специальный символ или что-то?

- редактирование - Хорошо извините парни, это не был 0x9b, вызывающий это, это был 0x11 символ. Который... барабан... является символом XON/XOFF. У меня по ошибке было управление потоком как xon/xoff на компьютере и никаком управлении потоком на устройстве! Спасибо за справку так или иначе.

8
задан Tomalak 17 June 2015 в 06:14
поделиться

5 ответов

Если символ перед 0x9B равен 0x10 (DLE - escape-символ канала данных), это может объяснить потерянные символы, которые вы видите. Некоторые устройства используют DLE в качестве индикатора управляющей команды, а последующий символ - это команда. Если символы DLE не экранируются, обычным признаком является потеря 2 символов в потоке или странное поведение устройства. Для экранирования символов DLE используется DLE. Итак, в вашем случае, если ваш поток данных включает:

... 0x10 0x9b ...

, вам нужно будет написать

... 0x10 0x10 0x9b ...

2
ответ дан 5 December 2019 в 14:01
поделиться

0x9B - это CSI или «Control Sequence Introducer», его часть набора управляющих кодов C1, см. Здесь: http://www.search.com/reference/C0_and_C1_control_codes

Предполагая, что данные проходят через слой, обрабатывающий управляющие коды C1, неудивительно, что после этого символа пропущено несколько байтов, поскольку он используется для обозначения начала escape-последовательности ansi. Байты исчезают, потому что какой-то уровень отключает их как часть инструкции. Подробнее об этом здесь: http://en.wikipedia.org/wiki/Control_Sequence_Introducer

Очевидно, не могу гарантировать, что это ваша проблема, но я бы начал копаться в документации api, основываясь на симптомах, которые вы описано.

3
ответ дан 5 December 2019 в 14:01
поделиться

В управляющих последовательностях ANSI, 0x9B является односимвольным Control Sequence Introducer (многосимвольный версия, которая более знакома, - ESC - [.

6
ответ дан 5 December 2019 в 14:01
поделиться

Для тех, кто задает этот вопрос только из-за заголовка: 0x9B / 155 отсутствует в таблицах ASCII потому что это не символ ASCII. Символы ASCII имеют ширину всего 7 бит, то есть их всего 128, просто равно нет символа 155.

[Community Wiki, потому что это на самом деле не отвечает на вопрос, только заголовок.]

0
ответ дан 5 December 2019 в 14:01
поделиться

Я предполагаю, что это 0x1B, то есть escape-символ ASCII, с битом четности в 8-м разряде (он поступает из последовательной связи и все такое).

Технически все символы в наборе ASCII меньше или равны 0x7F , символы от 0x80 до 0xFF являются частью расширенного ASCII . Значение кодов выше 0x7F обычно варьируется, что позволяет обрабатывать один из нескольких наборов символов с кодами размером ровно один байт. Эта возможность, к сожалению, вводит двусмысленность, поскольку нужно знать конкретный дополнительный набор символов, который используется («кодовая страница», если хотите).
Например, таблица "ASCII", на которую ссылается вопрос, похоже, не имеет никакого символа, связанного с 0x9B, в то время как многие другие расширенные наборы ASCII используют это для "простого" / отображаемого символа (например: символ > в ISO-8859-1, знак цента (символ типа c) с другим набором и т. д.

Следовательно, возможное значение символа 0x9B может зависеть от [подразумеваемого] набор символов, используемый в базовом приложении. Но, как было сказано ранее, это больше похоже на то, что символы закодированы в 7-битном формате (следовательно, это, вероятно, «чистые» символы ASCII) с одним битом четности.

1
ответ дан 5 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: