質問: asciiコードについて 先日、仕事でシリアルケーブルで接続されているpc~装置間にラインモニタをセットし、通信電文を調査したところ、「31b9aeb5」となっており、装置上には「19.5」と表示されていました。対応として、 0x31=1 0xb9=9 0xae=. 0xb5=5 のようになっているようです。asciiコードだと考えると「0x31=1」は納得するのですが、「0xb9=9」以降が良くわかりません。上記データから0x80を引くと「0x39」「0x2e」「0x35」となり、asciiコード表のデータに一致します。 そこで質問なのですが、上記の場合「0xb9」「0xae」「0xb5」はasciiコードなのですか?asciiコード表など見てみると0x00~0x7fの表はよく見かけます。ちなみに、このプログラムは海外で作られたようで、日本で言う「jis」のようなコードなのでしょうか?
回答: パリティが付いているのでそのようになります 最上位ビットをマスクして 下位7ビットを考えてみれば 0x31 0x39 0x3e 0x35となって 19.5のアスキーコードになると思います パリティとは簡単なエラー検出の機能で今回の場合 バイト単位で奇数のビットが立っているようにパリティを計算しています たとえば 0x31なら 2進数で表現すると 0011 0001 で立っているビット数は 3ですよね 0x35の場合 0011 0101となって 4ビット立っていることになります この場合 立っているビット奇数にするために 最上位ビットを立てて数を合わせるわけです そうなると 1011 0101 となって 0xb5になると言うわけです