Bye Bye Moore

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

ビッグエンディアンで数バイト格納されているデータをsedやawk でパースする

ビッグエンディアンで2バイト、1バイト、1バイトと格納されている文字列が来ていたとします。
こいつをリトルエンディアンで置き換えるには先頭だけ入れ替えてあげればいいですね。

$ echo AD7399AF | sed -e "s/\([1-9A-F]\{2\}\)\([1-9A-F]\{2\}\)\(.*\)/\\2\\1\\3/g"
73AD99AF

ビッグエンディアンで2バイト毎が3個……とかいう構成なら、sedで1バイト(=2文字)に切り分け、
awkのprintf フォーマットをつかってこう書いた方が楽かも……

$ echo AD7399AF51CD | sed 's/.\{2\}/& /g' | awk -F " " '{printf $2$1 $4$3 $6$5}'