Bash:将整数写入二进制文件

时间:2012-03-31 10:16:46

标签: linux bash shell

  

可能重复:
  using bash: write bit representation of integer to file

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

$ stat -c %s in.txt 
68187

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

我没有将“68187”字符串写入out.bin,而是想将168187的4字节int表示写入out.bin。

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

3 个答案:

答案 0 :(得分:27)

这是我能想到的:

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                                ....

这适用于 unsigned int,如果int是签名且值是否定,则必须计算二者的补码。简单的数学。

答案 1 :(得分:4)

您可以使用以下函数将数字VALUE转换为相应的字符:

chr() {
  printf \\$(printf '%03o' $1)
}

您必须为您使用的计算机/体系结构以正确的顺序(endianess)逐个转换字节值。所以我想,稍微使用另一种支持二进制输出的脚本语言可以做到最好。

答案 2 :(得分:2)

看看这是否适合你

perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin