シリアル入力(/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
。