我有一個二進制檔案,我想將其打包為 JSON 陣列,如下所示:
{
"content": [0, 23, 45,...]
}
現在我使用 hexdump 將檔案轉儲到一個單獨的檔案中(用逗號列印為未簽名的 u8)并手動將這些內容粘貼到陣列中:
hexdump -ve '1/1 "%u," foo.bin > foo_arr
尋找更好的方法來實作這一點,最好通過命令列(jq,標準 *nix 工具),JavaScript 也可以作業,但我寧愿避免它。
uj5u.com熱心網友回復:
這是一種選擇:
hexdump -ve '1/1 "%u\n"' foo.bin | jq -s '{content: .}'
在這里,我使用jq的-s標志(“slurp”)將 stdin 的所有行作為單個陣列讀入,只需將該陣列用作content.
例如:
$ python -c 'open("foo.bin", "wb").write(b"abc")'
$ hexdump -ve '1/1 "%u\n"' foo.bin | jq -s '{content: .}'
{
"content": [
97,
98,
99
]
}
uj5u.com熱心網友回復:
使用perl:
$ printf "\x00\x17\x2d" > foo.bin
$ perl -0777 -nE '@bytes = map { ord } split //, $_;
$" = ","; # Delimiter when inserting an array into a string
say qq/{"content":[@bytes]}/' foo.bin
{"content":[0,23,45]}
一次讀取整個檔案 ( -O777 -n) 并將其拆分為一個位元組陣列,然后輸出帶有這些位元組值的 JSON。
uj5u.com熱心網友回復:
jq可以使用-R(or --raw-input)讀取原始輸入并使用explode 內置函式將其轉換為代碼點編號:
jq -Rs '{content: explode}' foo.bin
如果二進制檔案不是太大,您還可以使用--arg將其讀入變數,然后對其進行應用explode。
jq -n --arg bin "$(cat foo.bin)" '{content: $bin | explode}'
注意:jq操作 Unicode 代碼點,而您當前的hexdump方法轉換單位元組計數,因此結果可能與這方面有所不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340773.html
標籤:javascript json 猛击 知乎
上一篇:嘗試在畫布(JS)中更新計時器
下一篇:為什么我不能分配所有填充值?
