これは私が思いつくことができるものです:
int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file
エンディアンに応じて、バイトオーダーを交換したい場合があります:
printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file
例 (デコードされているため、表示されます):
printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000 ....
これは署名なし用です int、int が signed の場合 値は負です 2 の補数を計算する必要があります。簡単な計算。
次の関数を使用して、数値の VALUE を対応する文字に変換できます:
chr() {
printf \\$(printf '%03o' $1)
}
使用するマシン/アーキテクチャの正しい順序 (エンディアン) で、バイト値を個別に変換する必要があります。したがって、バイナリ出力をサポートする別のスクリプト言語を少し使用すると、最適な結果が得られると思います。
これがうまくいくかどうかを確認してください
perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin