2017-01-10 34 views
2

類型的字符,我想非ASCII字符(0xfe0xed等)寫入程序的標準輸入。慶典 - 十六進制的標準輸入

有很多類似的問題,這一個,但我沒有找到一個答案,因爲:

  • 我想寫單字節字符,而不是Unicode字符
  • 我可以」牛逼管echo什麼

輸出在OS X 1,你可以測試:

nm - - 

我想寫對象文件魔術字節(例如0xfeedface)到nm使用標準輸入,所以我可以看到它如何行爲,我可以重新編碼它。

如果我使用的管道,然後第二個參數-,這意味着標準輸入,絕不會匹配任何字節,因爲所有的標準輸入必去的第一個。當使用終端而不是管道時,我可以輸入Ctrl + D,以便第一個「關閉」,第二個開始讀取。

我試着用Ctrl + Shift + U和OS X的Unicode十六進制輸入,但它不工作 - 我不能用它輸入所需的字符。

我也試圖與pbcopy剪貼板,但它無法讀取/粘貼非ASCII或非Unicode字符。

我該如何實現目標?

不要猶豫,編輯,因爲這是一個很難回答的表達。

¹在linux上的nm不處理stdin

+1

這依賴於終端模擬器。可能沒有辦法鍵入鍵盤上的所有字符。 – Barmar

回答

2

嘗試像xxd一個實用程序:

# echo hex 52 to pipe, convert it to binary, which goes to stdout 
echo 52 | xxd -r ; echo 
R 

或爲更專業的UTIL嘗試ascii2binary(默認輸入十進制):

# echo dec 52 to pipe, convert it to binary, which goes to stdout 
echo 52 | ascii2binary ; echo 
4 

# echo base11 52 to pipe, convert it to binary, which goes to stdout 
echo 52 | ascii2binary -b 11 ; echo 
9 

,傾倒了一系列的十六進制字符的,展示了hexdump見:

echo 7 ef 52 ed 19 | ascii2binary -b h | \ 
    hexdump -v -e '/1 "%_ad# "' -e '/1 " _%_u\_\n"' 
0# _bel_ 
1# _ef_ 
2# _R_ 
3# _ed_ 
4# _em_ 

請參閱man xxd ascii2binary這些utils可以做的各種技巧。

+0

令人遺憾的是,我不能將這些工具的輸出傳送給我的程序,因爲我必須「關閉」stdin,然後重新打開它。管道是行不通的,所以我想知道如何不管 – Bilow

+0

@Bilow輸入或粘貼非ASCII非Unicode字符的標準輸入,如果你有'bash',嘗試使用代碼[進程替換(HTTPS:/ /www.gnu.org/software/bash/manual/html_node/Process-Substitution。html)就像這樣:'nm <(echo ef ed | ascii2binary -bh)-',這將從文件描述符(包含代碼輸出在括號中)創建一個臨時文件,因此應該釋放第二個' '接收* stdin *。另請參見[OS X/Linux:將管道分爲兩個進程?](http://stackoverflow.com/questions/10218103/os-x-linux-pipe-in​​to-two-processes) – agc

+0

進程替換是一個好主意。但我想測試一個非常特殊的情況,其中兩個輸入都是標準輸入,在nm上更特別是在學生寫的程序上。也許我不能達到我想要做的事情? – Bilow