ASCII⇒10進⇒16進変換

■ASCII⇒10進⇒16進変換

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

■例えば、以下のような変換をしたいとき。。。

$ echo -e "Char\tDecimal\tHex"; \
  echo "Hello World" | \
  sed s/"."/"&\n"/g | \
  for Ch in `xargs -0`;do \
    echo -n "$Ch"; \
    echo $(printf "%3d" \"$Ch) | \
    awk '{printf "\t%3d\t0x%x\n",$1,$1}'; \
  done
Char    Decimal Hex
H        72     0x48
e       101     0x65
l       108     0x6c
l       108     0x6c
o       111     0x6f
W        87     0x57
o       111     0x6f
r       114     0x72
l       108     0x6c
d       100     0x64

■もう少し使いやすい16進で書くと。。。

$ echo "Hello World" | \
  sed s/"."/"&\n"/g | \
  for Ch in `xargs`;do \
    echo $(printf "%3d" \"$Ch) | \
    awk '{printf "%x",$1}'; \
  done;echo
48656c6c6f576f726c64

■コマンドにしてしまおう。

$ cat myscripts/hexer.sh
#!/bin/bash
if [ "$#" -lt 1 ];then
  echo "Usage $0 Word" >&2
  exit 1
fi

echo "$@" | sed s/"."/"&\n"/g | \
  for Ch in `xargs`;do \
    echo $(printf "%3d" \"$Ch) | \
    awk '{printf "%x",$1}'; \
  done;echo

$ chmod +x myscripts/hexer.sh
$ ./myscripts/hexer.sh
Usage ./myscripts/hexer.sh Word
$ ./myscripts/hexer.sh "test"
74657374
$ ./myscripts/hexer.sh Good Morning
476f6f644d6f726e696e67

■スペースとアスタリスクは除いているのはシェルの解釈を避ける為です。
 エスケープ方法が見つからなかっただけですが、大抵の場合は以下で充分かと。。。

$ echo -e "Char\tDecimal\tHex"; \
  for n in `seq 32 126`;do \
    echo "$n" | awk '{printf "0x%x\t%c\t%3d\n",$1,$1,$1}'; \
  done | \
  awk '{print $2}' | \
  grep -v "32\|\*" | \
  for Ch in `xargs -0`;do \
    echo -n "$Ch"; \
    echo $(printf "%3d" \"$Ch) | awk '{printf "\t%3d\t0x%x\n",$1,$1}'; \
  done
Char    Decimal Hex
!        33     0x21
"        34     0x22
#        35     0x23
$        36     0x24
%        37     0x25
&        38     0x26
'        39     0x27
(        40     0x28
)        41     0x29
+        43     0x2b
,        44     0x2c
-        45     0x2d
.        46     0x2e
/        47     0x2f
0        48     0x30
1        49     0x31
2        50     0x32
3        51     0x33
4        52     0x34
5        53     0x35
6        54     0x36
7        55     0x37
8        56     0x38
9        57     0x39
:        58     0x3a
;        59     0x3b
<        60     0x3c
=        61     0x3d
>        62     0x3e
?        63     0x3f
@        64     0x40
A        65     0x41
B        66     0x42
C        67     0x43
D        68     0x44
E        69     0x45
F        70     0x46
G        71     0x47
H        72     0x48
I        73     0x49
J        74     0x4a
K        75     0x4b
L        76     0x4c
M        77     0x4d
N        78     0x4e
O        79     0x4f
P        80     0x50
Q        81     0x51
R        82     0x52
S        83     0x53
T        84     0x54
U        85     0x55
V        86     0x56
W        87     0x57
X        88     0x58
Y        89     0x59
Z        90     0x5a
[        91     0x5b
\        92     0x5c
]        93     0x5d
^        94     0x5e
_        95     0x5f
`        96     0x60
a        97     0x61
b        98     0x62
c        99     0x63
d       100     0x64
e       101     0x65
f       102     0x66
g       103     0x67
h       104     0x68
i       105     0x69
j       106     0x6a
k       107     0x6b
l       108     0x6c
m       109     0x6d
n       110     0x6e
o       111     0x6f
p       112     0x70
q       113     0x71
r       114     0x72
s       115     0x73
t       116     0x74
u       117     0x75
v       118     0x76
w       119     0x77
x       120     0x78
y       121     0x79
z       122     0x7a
{       123     0x7b
|       124     0x7c
}       125     0x7d
~       126     0x7e