Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write integer to binary file using Bash? [duplicate]

Tags:

linux

bash

shell

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.

like image 695
Dagang Avatar asked Mar 31 '12 10:03

Dagang


3 Answers

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.

like image 178
Karoly Horvath Avatar answered Oct 05 '22 22:10

Karoly Horvath


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.

like image 4
Hannes Avatar answered Oct 05 '22 20:10

Hannes


See if this works for you

perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin 
like image 2
pizza Avatar answered Oct 05 '22 20:10

pizza