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

可能重复:
使用bash:将整数的位表示写入文件

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

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

而不是写“68187”stringout.bin,我想要写入out.bin的168187 4字节int表示。

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

Solutions Collecting From Web of "Bash:写入二进制文件的整数"

这是我能想出的:

 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是有符号的,而且值是负数,你必须计算二进制补码。 简单的数学。

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

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

您必须逐个转换字节值,然后按正确的顺序(endianess)对所使用的机器/体系结构进行转换。 所以我猜想,使用另外一种支持二进制输出的脚本语言最适合。

看看这是否适合你

 perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin 
 echo 'obase=2;'`stat -c %s in.txt` | bc > out.bin