簡體   English   中英

為什么xxd添加字符?

[英]Why does xxd add chars?

我正在嘗試從沒有hexdumpbase64工具的系統中撤消od命令。

我這樣做是這樣的(當然,實際上,編碼是在“小型”系統上進行的,解碼是在我的工作站上完成的,但是要進行測試,我首先嘗試在一行中進行整體測試):

echo TEST | od -tx1 | xxd -r

當然,例如, echo TEST只是一個占位符。 cat test.bmp或其他任何東西。

> echo TEST
TEST

> echo TEST | od -tx1
0000000 54 45 53 54 0a
0000005 

> echo TEST | od -tx1 | xxd -r
TEST

看起來不錯,但這是不同的,因為如果再次將其賦予od ,我們可以在這里看到:

> echo TEST | od -tx1 | xxd -r | od -tx1
0000000 54 45 53 54 0a 00 00 00
0000010 

為什么xxd -r將那00秒相加?

由於xxd -r嘗試並且無法解析格式與期望格式不同的輸入,因此得到了這三個nul字節。 od -tx1添加了一個帶偏移但沒有數據字節的額外行。 加上xxd的偏移量在它們之后有一個冒號,並以不同的寬度打印,並且顯示了可打印的字節以及十六進制轉儲,並且可能在不同的基數中…… xxd不能很好地解決這一問題,並因此增加了多余的字節。

例子:

$ echo TEST | xxd
00000000: 5445 5354 0a                             TEST.
$ echo TEST | xxd | xxd -r
TEST
$ echo TEST | xxd | xxd -r | xxd    
00000000: 5445 5354 0a                             TEST.
$ echo TEST | xxd | xxd -r | od -tx1
0000000 54 45 53 54 0a
0000005
$ echo TEST | od -tx1 | head -1 | xxd -r | od -tx1 
0000000 54 45 53 54 0a
0000005

看看給xxd -r預期的xxd樣式輸入時它們不存在嗎? 當您從od的輸出中od多余的行時,它們又如何不存在? 不要混合和匹配不兼容的數據格式。

如果我完全刪除偏移量,它似乎可以工作:

> echo TEST | od -tx1 -An
 54 45 53 54 0a
> echo TEST | od -tx1 -An | xxd -r -p
TEST
> echo TEST | od -tx1 -An | xxd -r -p | od -tx1 -An
 54 45 53 54 0a

答對了! 請注意字節前面的多余“”。 似乎沒有作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM