Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

awkで16進数をよろしく使う"non-decimal-data"オプション

実際のところ

以下は
"GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2)"
での実行例です。
OSのデフォルトのawkでは対応してなかったりするので注意。

なんもないと

$ echo 0xdeadbeef | awk '{print $1 "\n ~> " $1+0}'
0xdeadbeef
 ~> 0

ですが、これに"--non-decimal-data"、あるいはその短縮形である"-n"をつけると

$ echo 0xdeadbeef | awk --non-decimal-data '{print $1 "\n ~> " $1+0}'
0xdeadbeef
 ~> 3735928559

$ echo 0xdeadbeef | awk -n '{print $1 "\n ~> " $1+0}'
0xdeadbeef
 ~> 3735928559

なお、上記の例ではPOSIX準拠でも対応するようです。

$ echo 0xdeadbeef | awk -P '{print $1 "\n ~> " $1+0}'
0xdeadbeef
 ~> 3735928559

だだ、計算するとなると--non-decimal-dataオプションが必要

$ echo 0xaa | awk -n '{print $1 "+0x02\n ~> " $1 + 0x02}'
0xaa+0x02
 ~> 172

$ echo 0xaa | awk -P '{print $1 "+0x02\n ~> " $1 + 0x02}'
0xaa+0x02
 ~> 170

将来廃止予定……??

と、それなりに使えそうなオプションですが以下のような警告が公式からでています。

CAUTION: Use of this option is not recommended. It can break old programs very badly. Instead, use the strtonum() function to convert your data (see section String-Manipulation Functions). This makes your programs easier to write and easier to read, and leads to less surprising results.

This option may disappear in a future version of gawk.

miniterm.pyが割と使える

Python用シリアル通信ライブラリpyserialには
サブコマンドとしてminiterm.pyというのが付いてきます。

これが結構使え得たのでメモ。

実際のところ

ボーレート3M、ハードウェアフロー制御、パリティodd、8bitというデバイスに接続するには、
以下の様なコマンドを打てばOKです。

$ miniterm.py --parity O --raw --rtscts  /dev/ttyUSB0 3000000

既成のコマンドではボーレートの最大値が1M未満だったりハードウェアフロー制御(RTS/CTS)がサポートしてなかったり挙動が怪しかったりで結構困っていたので助かりました。


参考もと

  • "miniterm.py --help"

【読書メモ】 ディジタル作法 −カーニハン先生の「情報」教室−

ディジタル作法 −カーニハン先生の「情報」教室−

ディジタル作法 −カーニハン先生の「情報」教室−

伝説的名著「プログラミング言語C」の著者、カーニハン氏による、
プログラミング/コンピューター周辺にまつわる色んな技術の解説本になります。

二進数からWEB、プログラミングからアルゴリズムP2Pに至るまで、
情報工学に関する幅広い内容を取り扱っており基礎情報技術者試験のおさらいみたいな内容になっています。

歴史的背景も含めて解説してくれているので、なんで今のような形になったか理解したい人にも向いているかも。

【イベントログ】mbed祭り 2019@師走の虎ノ門

mbed祭り 2019@師走の虎ノ門

最後に抽選会があり……かなり良いボードが丸々当たりました。
スゴイ
mbed NXP LPC11U24評価キット: マイコン関連 秋月電子通商-電子部品・ネット通販