一尘不染

如何使用Bash将整数写入二进制文件?[重复]

linux

我需要将文件的大小写入二进制文件。例如:

$ stat -c %s in.txt 
68187

$ stat -c %s in.txt >> out.bin

与其将“ 68187”字符串写入out.bin,我想将168187的4字节int表示形式写入out.bin。

如何将“ 68187”转换为4字节整数?


阅读 361

收藏
2020-06-03

共1个答案

一尘不染

这是我能想到的:

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是有 符号的并且 值是 负数 ,则必须计算两者的补数。简单的数学。

2020-06-03