Possible Duplicate:
using bash: write bit representation of integer to file
I need to write the size of a file into a binary file. For example:
$ stat -c %s in.txt
68187
$ stat -c %s in.txt >> out.bin
Instead of writing 68187 as a string to out.bin, i want to write it as a 4 bytes integer to out.bin.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With