echo '0A'
3つの文字を生成し0 A NLます。xxd -b
次に、これらの3文字をバイナリで出力します。値が10(つまり16進数A
)の1バイトだけが必要な場合は、次のように記述できます(bashで)。
echo -n $'\x0A'
^ ^ ^
| | |
| | +-- `\x` indicates a hexadecimal escape
| +----- Inside a $' string, escapes are interpreted
+------- -n suppresses the trailing newline
より良い代替案はprintf '\x0A'
、printfは、フォーマット文字列のエスケープシーケンスを解釈し、暗黙の改行を出力しません。(これはPosix互換のソリューションであり、どのPosix互換シェルでも動作するはずです。)さらに別のbashの可能性はecho -n -e '\x0A'
です。(非標準)-e
フラグは、escapeシーケンスを解釈するようにエコーに要求します。
echo '1' | xxd -b
これは16進数50
であることxxd
がわからないので0A
、16進数と同等のものを出力しませ1
ん。また、文字のASCIIコード1
は16進数であり31
、ではありません50
。
エンディアンはバイトに影響しません。バイト内のビットの順序は、バイトがシリアルラインを介して送信されるまで完全に概念的であり、オシロスコープなどでしか見えません。
50
。それはタイプミスです。今すぐ修正