How to write integer to binary file using Bash?

This is what I could come up with:

int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file

Now depending on endianness you might want to swap the byte order:

printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file

Example (decoded, so it's visible):

printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000                                ....

This is for unsigned int, if the int is signed and the value is negative you have to compute the two's complement. Simple math.


You can use the following function to convert a numeric VALUE into its corresponding character:

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

You have to convert the byte values individually, after each other in the correct order (endianess) for the machine/architecture that you use. So I guess, a little use of another scripting language that supports binary output would do the job best.


See if this works for you

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

Tags:

Linux

Shell

Bash