2015-07-22 33 views
0

十六進制(字符)到二進制轉換很有用,特別是當您想要查看一些十六進制字符串內部的幾個位時。如何將十六進制數據直接輸入到bc並將其轉換爲二進制 - 乾淨嗎?

正是因爲這個原因,我想管一些十六進制數據到bc(Unix程序稱爲「基本計算器」)並將其轉換爲二進制字符(1s和0s)。

通常我想貓一個十六進制數據(文件中的行十六進制數據)的文件,並將其管道到bc並有bc將其轉換爲二進制。或者我可以將一個二進制文件轉換爲十六進制的xxd和管道到bc。

有辦法做到這一點,但考慮到BC需要一些指令,所有的方法似乎有點複雜。這怎麼可以簡單地完成,沒有一個for循環的bash腳本?

+1

究竟是什麼問題? –

+0

我改寫了這個問題。我正在使用bc將十六進制轉換爲二進制。我正在尋求更好的方式來做到這一點。 – Xofo

+0

謝謝 - 看起來不錯,但返回>字符,我認爲你的解決方案中有一個語法錯誤。好開始。 – Xofo

回答

1

我認爲這是做你想做的。

{ echo "obase=2; ibase=16"; xxd -c 32 -u -p file.bin; } | bc 

它只是飼料均設置和流媒體文件內容bc有一個括號列表。 -u標誌爲xxd使其輸出大寫的十六進制字母。

+0

這是一個很好的答案,並會證明對他人有用。 – Xofo

0

由於StackOverflow上,鼓勵在回答自己的問題,這是我的解決方案:

xxd -c 32 -p file.bin | awk '{print toupper($0)}' | tr '\n' ' ' | { read line; for i in $line; do echo "obase=2; ibase=16; $i" | bc ; done } 

,因爲它似乎令人費解,我不喜歡我的解決方案。我想設計一種方法來將xxd的輸出傳遞給bc,而不使用for循環,並且不使用tr(我也可以使用大寫字母)。無論如何,它的工作原理,但我認爲它可以做得更好。

+0

這似乎是問題的一個組成部分,因爲問題本身仍然缺乏實際的完整問題。 –

+0

理想情況下,我想製作最理想的問題。這個答案可以使它成爲它的狀態,我相信會有更好的答案出現。 – Xofo

相關問題