在linux中有多種方式可以將檔案dump成16進製制顯示,也可以將16進製制值再反向成檔案。
$ hexdump test.txt
0000000 524f 2d41 3030 3036 0a30 524f 2d41 3030
0000010 3630 0a30
0000014
$ od -x test.txt
0000000 524f 2d41 3030 3036 0a30 524f 2d41 3030
0000020 3630 0a30
0000024
$ xxd test.txt
0000000: 4f52 412d 3030 3630 300a 4f52 412d 3030 ora-00600.ora-00
0000010: 3036 300a 060.
注意到hexdump和od出來的結果都是按實際儲存的位元組序,因為基於x86的linux是little-endian的,也就是高低位元組是顛倒了的。但是xxd的結果是將位元組序調整過了的。而ibm的power cpu是big-endian的,所以在aix上od的結果如下:
$od -x test.txt
0000000 4f52 412d 3030 3630 300a 4f52 412d 3030
0000020 3036 300a
0000024
xxd還可以實現從16進製制反向生成檔案,只需要加上-r選現即可。
xxd test.txt | xxd -r
ora-00600
ora-00060
$ echo 0000000: 4f52 412d 3030 3630 300a 4f52 412d 3030 | xxd -r
ora-00600
ora-00
但是要注意xxd接受的是big-endian格式的16進製制值,如果輸入的是little-endian的,則生成的檔案字元(包括換行符)是兩兩顛倒的。
$ od -x test.txt | xxd -r
ro-a0006
0ro-a0060
0在vi編輯器中可以使用:%!xxd呼叫xxd來將檔案轉換成16機制編輯模式,編輯完成後再呼叫:%!xxd -r轉換檔案模式,從而使得vi具有16進製制編輯的功能,:%!其實就是呼叫外部shell命令,需要注意的是xxd的位元組序是big-endian的,不要搞錯了。
如果你的linux系統中找不到xxd命令,那麼檢查下是否有安裝vim-common包
rpm -qa | grep vim
vim-enhanced-6.3.046-0.40e.7
vim-x11-6.3.046-0.40e.7
vim-minimal-6.3.046-0.40e.7
vim-common-6.3.046-0.40e.7
Linux中如何將檔案dump成16進製制值
在linux中有多種方式可以將檔案dump成16進製制顯示,也可以將16進製制值再反向成檔案。hexdump test.txt 0000000 524f 2d41 3030 3036 0a30 524f 2d41 3030 0000010 3630 0a30 0000014 od x test.tx...
如何將Unicode文字寫到日誌檔案中
有時為了定位問題,我們需要結合列印日誌來處理。特別是較難復現的,一般都需要檢視上下文日誌才能找出可能存在的問題。考慮到程式要在不同語言的作業系統上執行,程式介面顯示要支援unicode,列印出來的日誌也要支援unicode,即將執行日誌以unicode文字寫到日誌檔案中。那麼如何才能將unicode...
如何將Unicode文字寫到日誌檔案中
有時為了定位問題,我們需要結合列印日誌來處理。特別是較難復現的,一般都需要檢視上下文日誌才能找出可能存在的問題。考慮到程式要在不同語言的作業系統上執行,程式介面顯示要支援unicode,列印出來的日誌也要支援unicode,即將執行日誌以unicode文字寫到日誌檔案中。那麼如何才能將unicode...