8


0

0x9B(155decimal)は特別な制御文字ですか? なぜアスキー表にないのですか?

私は組み込みシステムで作業しており、シリアルポートを介して特定のデータチャンクを送信するというドラマがあります。 絞り込んだところ、メッセージに0x9Bが含まれていると、メッセージが破損することがわかりました。

そこで、http://www.asciitable.com/で0x9b(155)を検索すると、それが欠落しています! それは奇妙な偶然ではありません!

何かアイデアはありますか、これは特別なキャラクターですか?

-編集-わかりました。申し訳ありませんが、これは0x9bが原因ではなく、0x11文字でした。 これ…​ドラムロール…​ XON / XOFF文字です。 コンピューターでxon / xoffとしてフロー制御を誤って使用し、デバイスではフロー制御を使用していませんでした! とにかく助けてくれてありがとう。

5 Answer


6


ANSIエスケープシーケンスでは、 0x9B`は1文字のhttp://en.wikipedia.org/wiki/Control_Sequence_Introducer[Control Sequence Introducer](より馴染みのある複数文字バージョンは ESC- [`です。


2


0x9Bは、CSIまたは「Control Sequence Introducer」であり、制御コードのC1セットの一部です。http://www.search.com/reference/C0_and_C1_control_codesを参照してください

データがC1制御コードを処理するレイヤーを通過していると仮定すると、ANSIエスケープシーケンスの開始を示すために使用されるこの文字の後に数バイトが欠落していることは驚くことではありません。 一部のレイヤーが命令の一部としてそれらを剥ぎ取っているため、バイトは消えています。 詳細はこちら:http://en.wikipedia.org/wiki/Control_Sequence_Introducer

明らかにこれがあなたの問題であることを保証することはできませんが、あなたが説明した症状に基づいてAPIドキュメントを掘り始めるところです。


2


0x9Bの前の文字が0x10(DLE-データリンクエスケープ文字)の場合、表示される失われた文字を説明している可能性があります。 一部のデバイスは、DLEを制御コマンドインジケーターとして使用し、後続の文字はコマンドです。 DLE文字がエスケープされない場合、通常の兆候は、ストリーム内の2文字の損失、またはデバイスからの奇妙な動作です。 DLEでDLEキャラクターをエスケープします。 そのため、データストリームに以下が含まれている場合、

  1. 0x10 0x9b …​

あなたは書く必要があります

  1. 0x10 0x10 0x9b …​


1


私はこれが0x1B、つまり ASCIIエスケープ文字。8番目のビット位置にパリティビットがあります(シリアル通信とすべてに由来します)。

技術的には、* ASCIIセットの文字はすべて0x7F 以下であり、0x80から0xFFまでの文字は _extended_ASCII *の一部です。 通常、0x7Fを超えるコードの意味はさまざまであるため、複数の文字セットの1つを正確に1バイトのサイズのコードで処理できます。 残念ながら、この機能は、使用中の特定の追加文字セット(必要に応じて「コードページ」)を知る必要があるという曖昧さをもたらします。 +たとえば、質問で参照されている「ASCII」テーブルには、0x9Bに関連付けられた文字がないように見えますが、他の多くの拡張ASCIIセットはこれを「プレーン」/表示可能文字に使用します(例: ISO-8859-1、セント記号(cのような文字)と別のセットなど。

したがって、0x9B文字の可能な意味は、 [implied] character set in use with the underlying application. But as 前述のとおり、文字は1つのパリティビットで7ビット(したがって「純粋な」ASCII文字である可能性が高い)でエンコードされているようです。


0


タイトルだけのためにこの質問に出くわす人のために:ASCII文字ではないので、ASCIIテーブルから 0x9B /` 155`が欠落しています。 ASCII文字の幅は7ビットのみです。つまり、128文字しかなく、単に文字155はありません。

[コミュニティWikiは実際には質問に回答せず、タイトルのみに回答するため。]