labunix's blog

labunixのラボUnix

10進数<=>ASCII<=>16進数変換(bash+awk)

■以前にもやった。

10進⇒16進⇒ASCII変換
http://d.hatena.ne.jp/labunix/20130106

ASCII⇒10進⇒16進変換
http://d.hatena.ne.jp/labunix/20130107

16進⇒10進⇒ASCII変換
http://d.hatena.ne.jp/labunix/20130108

■今回は半角スペースで区切った複数の単語。

$ for n in h e l l o \ w o r l d;do \
    echo $(printf "%3d" \""$n" ) | awk '{printf "%x ",$1}'; \
  done;echo
68 65 6c 6c 6f 20 6f 72 6c 64

$ echo "68 65 6c 6c 6f 20 6f 72 6c 64" | \
  for n in `xargs`;do echo "$((0x$n))" | awk '{printf "%c",$1}'; done;echo
hello world

$ for n in h e l l o \  w o r l d;do \
    echo $(printf "%03d" \""$n" ); \
  done | xargs echo -n;echo
104 101 108 108 111 032 119 111 114 108 100

$ echo "68 65 6c 6c 6f 20 77 6f 72 6c 64" | \
  for n in `xargs`;do echo "$((0x$n))" | awk '{printf "%03d ",$1}';done;echo
104 101 108 108 111 032 119 111 114 108 100 

■要はこういうこと。

$ for n in h e l l o \  w o r l d;do \
    echo $(printf "%03d" \""$n" ) | awk '{printf "%03d,%c,0x%x\n",$1,$1,$1}'; \
  done;echo
104,h,0x68
101,e,0x65
108,l,0x6c
108,l,0x6c
111,o,0x6f
032, ,0x20
119,w,0x77
111,o,0x6f
114,r,0x72
108,l,0x6c
100,d,0x64

$ echo "68 65 6c 6c 6f 20 77 6f 72 6c 64" | \
  for n in `xargs`;do \
    echo "$((0x$n))" | awk '{printf "%03d,%c,0x%x\n",$1,$1,$1}'; \
  done;echo
104,h,0x68
101,e,0x65
108,l,0x6c
108,l,0x6c
111,o,0x6f
032, ,0x20
119,w,0x77
111,o,0x6f
114,r,0x72
108,l,0x6c
100,d,0x64