シリアルで受信したデータバイトを16進テキストに変換

シリアルで受信したデータバイトを16進テキストに変換

こんにちは。これでバイトデータを作成します(例:\x00\x11\x22)私のPCからttyS1ポートでunixを実行しているデバイスに転送されます。次のいずれかを使用してデータを印刷できます。

cat /dev/ttyS1
od -x < /dev/ttyS1

どちらも機能しますが、catを使用すると「files」が印刷されます。 od を使用すると、一部のデータバイトが表示されます。

0000000     00fe
0000001

私が送ったものではありません(001122Hex)

正しい16進数の表示を取得するには?

編集する:tty権限の設定:

stty -F /dev/ttyS1 speed 115200 cs8 -cstopb -parenb -echo time 3 min 0

編集2:何か変なことが起きているのに理由がわかりません。私は別のデータを送信しようとしました:「1049」そして私のプログラムはそれを「\x10\x49」として送りました。 od 戻り値:

0000000    4910
0000002

バイトを反転させるようです。しかし、今理解していないのは、「\x11\x49」のような重複した数字があれば、一度データが破損するということです。 x11、x00、x22など、繰り返される値がすべて何らかの理由で誤って変換されているようです。また、8より大きい値は誤って翻訳されます。理由をご存知ですか? hexdumpまたはodを使用すると、同じ結果が表示されます。

ベストアンサー1

od はここで 254 Decimal を受け取ったことを示し、左側の par は「行番号」です。

ここで問題は、データの送信方法や/dev/ttyS1権限だと思います。この部分についてさらに開発できますか?

xxd -rを使って何が見えますか?

おすすめ記事