Binary

如何將換行符分隔的 ascii 數字流轉換為二進制(然後再返回)?

  • December 20, 2017

/dev/dsp這是在與和互動的上下文中pacat

理想情況下,我希望能夠指定編碼機制(big-與 little-endian、char/short/long)。

作為獎勵,某種二進制結構的打包可能會很好。

我基本上在考慮像numpy 的 dtype之類的東西,但在外殼上。

樣本輸入/輸出

> seq 11 | bincat --big -n 1 | hd
01 02 03 04 05 06 07 08
09 0A 0B 

程式語言在這個任務上應該沒有問題;這是從輸入中的數字列表中打包 64 位整數(大端或小端)和本機 32、16 和 8 位的一種方法

$ cat input
-1
2
$ < input perl -pe '$_=pack "q>",$_' | xxd
00000000: ffff ffff ffff ffff 0000 0000 0000 0002  ................
$ < input perl -pe '$_=pack "q<",$_' | xxd
00000000: ffff ffff ffff ffff 0200 0000 0000 0000  ................
$ < input perl -pe '$_=pack "l",$_' | xxd
00000000: ffff ffff 0200 0000                      ........
$ < input perl -pe '$_=pack "s",$_' | xxd
00000000: ffff 0200                                ....
$ < input perl -pe '$_=pack "c",$_' | xxd
00000000: ff02                                     ..
$ 

另一種方式需要知道二進製文件的內容,否則數字可能會全部錯誤

$ jot 255 | perl -pe '$_=pack "l>",$_' > 32big
$ < 32big perl -nE 'say for unpack "l*",$_' | head -3
16777216
33554432
50331648
$ < 32big perl -nE 'say for unpack "l>*",$_' | head -3
1
2
3
$ 

引用自:https://unix.stackexchange.com/questions/411938