用於二進製到八度/十六進制格式的數據操作的命令?
當我將一個 1GB 的大文件拆分為包含 777 個事件的文件時,我需要將二進制數據轉換為十六進制/八度音/任何合適的格式並返回二進制,每個事件的大小不同,因此每個事件都由
fafafafa
hexdump 中的字元串分隔格式(但請注意,telnet-examples 中可能不存在此分隔符,因此您可以在那裡選擇任何字元串進行練習)。我試圖了解這些命令中的哪些適合於此,受此答案的啟發。下面的數據源,telnet 的二進制,只是一個例子。我故意使用偽級別來評論輸出,而不是用細節混淆你;我有標題及其部分的完整文件,但對於這項任務,他們的理解不是必需的。
從 - v
od -v /usr/bin/telnet | head 0000000 042577 043114 000402 000001 000000 000000 000000 000000 0000020 000003 000076 000001 000000 054700 000000 000000 000000 0000040 000100 000000 000000 000000 073210 000001 000000 000000 0000060 000000 000000 000100 000070 000010 000100 000034 000033 0000100 000006 000000 000005 000000 000100 000000 000000 000000 0000120 000100 000000 000000 000000 000100 000000 000000 000000 0000140 000700 000000 000000 000000 000700 000000 000000 000000 0000160 000010 000000 000000 000000 000003 000000 000004 000000 0000200 001000 000000 000000 000000 001000 000000 000000 000000 0000220 001000 000000 000000 000000 000034 000000 000000 000000
評論
- 第一個字元串應該是一些標題,但奇怪的是它們從 2、4、6、10,…… 所以我認為這可能是以後的限制
十六進制轉儲 -v
hexdump -v /usr/bin/telnet | head 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000010 0003 003e 0001 0000 59c0 0000 0000 0000 0000020 0040 0000 0000 0000 7688 0001 0000 0000 0000030 0000 0000 0040 0038 0008 0040 001c 001b 0000040 0006 0000 0005 0000 0040 0000 0000 0000 0000050 0040 0000 0000 0000 0040 0000 0000 0000 0000060 01c0 0000 0000 0000 01c0 0000 0000 0000 0000070 0008 0000 0000 0000 0003 0000 0004 0000 0000080 0200 0000 0000 0000 0200 0000 0000 0000 0000090 0200 0000 0000 0000 001c 0000 0000 0000
評論
- 第一個字元串的編號確定
- 之間的一些字母可能是以後的可讀性問題
- 第一個字元串的大小與後面的四個字母組合不同
十六進制轉儲-vb
hexdump -vb /usr/bin/telnet | head 0000000 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000 0000010 003 000 076 000 001 000 000 000 300 131 000 000 000 000 000 000 0000020 100 000 000 000 000 000 000 000 210 166 001 000 000 000 000 000 0000030 000 000 000 000 100 000 070 000 010 000 100 000 034 000 033 000 0000040 006 000 000 000 005 000 000 000 100 000 000 000 000 000 000 000 0000050 100 000 000 000 000 000 000 000 100 000 000 000 000 000 000 000 0000060 300 001 000 000 000 000 000 000 300 001 000 000 000 000 000 000 0000070 010 000 000 000 000 000 000 000 003 000 000 000 004 000 000 000 0000080 000 002 000 000 000 000 000 000 000 002 000 000 000 000 000 000 0000090 000 002 000 000 000 000 000 000 034 000 000 000 000 000 000 000
命令
od -v
給了我六個字母字元串000000 042577
,我認為這是一個八度格式。另一個命令hexdump -v
也給了我四個字母的字元串,例如457f 464c
,但帶有一些八度音階選項hexdump -vo
會給出三個字母的單詞,例如000000 177 105 ...
.這些命令中的哪一個適用於二進制數據的數據操作,例如使拆分變得容易?
此處討論的 1GB 二進制測試數據由以下人員創建
dd if=/dev/urandom of=sample.bin bs=64M count=16
按字節位置拆分
請在此處查看有關此的主題。如果字節偏移量是固定的,我認為這是進行拆分的最合適方法。您需要確定前兩個事件標頭的位置併計算事件的大小。還要考慮最後一個事件標頭的尾部,以便您知道何時結束拆分。
xxd
答案在 FloHimself 的評論中。
xxd -ps sample.bin | process | xxd -ps -r
從 -v
在
od -v
中,應該根據 StephenKitt 的評論指定如下輸出格式od -v -t x1 sample.bin
給予
0334260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0334540
這更容易處理。
關於通過 Ascii 通道而不是 hex/octave 的評論
我認為從二進制轉換為十六進制再轉換回二進制就足夠了
xxd -ps
。我做到了base64 sample.bin | less -s -M +Gg
,但我注意到處理速度明顯變慢,輸出看起來像這樣CGgUAMA0GCSqGSIb3DQEBAQUABIIBABR2EFj76BigPN + jzlGvk9g3rYrHiPKNIjKGprJMaB91ATT6gc0Rs3xlEr6Ybzm8NVcxMnR + 2chto / oSh85ExuH4Lk8mELHOIZLeAUUr8eFAXKnZ4SBZ6a8Ewr0x / zX09Bp6IMk18bdVUCT15PT2fbluvJfj7htWCDy0ewm + eU2LIJgkriK8AA0oarqjjK / CIhfglQutfN6QDEp4zqc6tJVqUO7XrEsFlGDOgcPTzeWJuWx31 / 8MrvEn5HcPzhq + nMI1D6NYjzGhHN08 // ObF3z3zthlCDVmowbV161i2LhQ0jy9a / TNyAM0juCR0IF9j7zSyFW0 / vvMZYdt5kg1J1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA