2016-02-27 133 views
-1

我將一些十六進制ascii管道到perl中,並且希望使用它的打印功能將這些東西打印到文件中。然而六角不打印爲ASCII,但作爲普通字符串perl打印從arg輸入十六進制ascii輸入

echo "\x48\x32\x35\x45" "\x90\xc1\xe2\x7a" | perl -e' @string = split " ",<>; print ${string[0]},chr(0),"$string[1]";' > input.txt 

然而,這給出input.txt的以下

\x48\x32\x35\x45^@\x90\xc1\xe2\x7a 

,它應該看上去更像

H25E^@<90><C1><E2>z 
+0

這是你想要的嗎?echo -en「\ x48 \ x32 \ x35 \ x45 \ x90 \ xc1 \ xe2 \ x7a」'?甚至是'echo -en「\ x48 \ x32 \ x35 \ x45 \ x90 \ xc1 \ xe2 \ x7a」|貓-A'? – hek2mgl

+0

0x7F以上的任何字符代碼都不是ASCII。你是說你想讓小於0x2o的任何東西都顯示爲「^ @」等,並且任何超過0x7E的顯示爲「<7F>」? – Borodin

回答

0

您需要eval s(和額外的雙引號)使perl「解釋」十六進制轉義:

echo "\x48\x32\x35\x45 \x90\xc1\xe2\x7a" | perl -e '@string = split " ",<>; print eval "\"$string[0]\"",chr(0),eval "\"$string[1]\"";' 
+0

不錯。此解決方案有效 – Martin

相關問題