シェル - バイナリファイルを16進数の文字で読み込みます。

シェル - バイナリファイルを16進数の文字で読み込みます。

シリアル入力(/dev/tty*)を文字単位で読み取ろうとしています。そのプロトコルに従ってデータを解析するために必要です。私の現在のアプローチは次のとおりです。

while read -rs -n 1 c; do
    echo Read a char:
    echo ${c}
done < "${SERIAL_PORT}"

データがバイナリであり、一部のバイトが \x00 (変数で文字として許可されていない) という事実を除いては機能します。私の目標は、まずバイトを16進文字列(2文字)に変換し、それを変数に格納することです。これが私が詰まっているところです。これを行うための良い方法はありますか?私はposix互換性を維持することを好みます。

答え1

od入力されたバイト/文字ごとに16進ASCII表現を生成し、それを一度に出力するために使用されます。

od -v -An -txC <input |
awk '{ for (i = 1; i <= NF; ++i) print $i }'

これにより、1行に16進数の数値が出力されます。

必要に応じてこの内容を読むことができますが、read既存のコードで処理できる場合はより良いでしょうawk

関連情報