2017-04-06 28 views
2

相當新手的問題,但我陷入了一段時間:我有一個問題,讀取和解析存儲在硬盤驅動器上的字符串的地址我知道...在MINIX中使用od從二進制讀取一個以空字符結尾的字符串變爲

我不知道字符串的長度,只有它的最大長度說n。它已被寫入n緩衝區以零開始,所以它的hexdump類似於xx xx xx xx 00 00 00 00 00,其中xx的十六進制爲正確的字符串字符。

所以我知道該字符串的地址,我把它複製到二進制文件tmp使用使用dd if=<hd> of=tmp(適當BS /計數/跳到獲得n字節的緩衝區)。然後在bash(或者更確切地說,在MINIX灰要準確)我嘗試使用od解析它並讀入變量,但我無法擺脫空間/空的:

name=$(od -Anx -tc tmp) 
echo $name 

,我得到J O H N \0 \0 \0 \0 \0而不是簡單地JOHN

+0

你可以嘗試將其通過'strings'如果是字符串等。 –

+0

'name = $(od -Anx -tc <(sed's/\ x00 // g'tmp))' – 123

+0

你可以在這裏粘貼'cat -e tmp'的輸出嗎? –

回答

1

您可以使用一個簡單的一招依賴於以下事實:bash strings cannot contain a NUL character

name="$(cat tmp)" 
echo $name 
+0

它在bash下運行良好..但是我在開始時很不精確(對不起) - 我需要它在MINIX 3外殼(灰)下工作。 Ash爲此產生空弦。無論如何,很高興知道這個招數,謝謝 – micsza

+0

我發現「...使用** bash **和od」相當「*精確*」:) –

+0

無後顧之憂。你可以試試'name = $(cat tmp)'?我認爲這應該在'灰'工作以及... –

相關問題