Linux Convert Between hex,dec,bin

1 minute read

一些 linux bash 下的 trick,讓你在 Hexadecimal, decimal, binary 之間無痛轉換。

File to Hex

# 配上 ASCII + address 瀏覽
$ hexdump -C ./file | less
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 3e 00 01 00 00 00  c0 03 40 00 00 00 00 00  |..>.......@.....|

# 只要中間部份的輸出,每 16 byte一行
$ hexdump -v -e '16/1 "%02X ""\n"' ./file
7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00
02 00 3E 00 01 00 00 00 C0 03 40 00 00 00 00 00

# 全部連在一起
$ hexdump -v -e '16/1 "%02X"' ./file
7F454C4602010100000000000000000002003E0001000000C003400000000000

File to Bin

# 直接印 raw data 印到螢幕上
$ cat ./file

# 把 printable 字串印在螢幕上
$ strings ./file

Hex to Bin

# 這三種格式都可以,空白也可以省略
$ echo '4E 4d 0x44 3031' | xxd -r -p
NMD01

Bin to Hex

# 像 file to hex 一樣丟進去 hexdump, \c 是為了把 echo 行尾的換行去掉
$ echo -e '0123456789012\c' | hexdump -v -e '16/1 "%02X " "\n"'
30 31 32 33 34 35 36 37 38 39 30 31 32 

Hex to Dec

# shell builtin, 大小寫都可以
$ echo $[16#BA] $[16#ba]
255 255

# printf 大小寫皆可
$ printf "%d %d" 0xFF 0xff
255 255

Dec to Hex

$ printf '%02X %02x' 255 255
FF ff

Edit Hex

如果你是用 vim 的話,有個 plugin hexmode 可以讓你像一般 hex editor 一樣去改 code,不然你就要去下載坊間的一些 hex editor 來改了。