Bash – How to convert an unsigned decimal (less than 1<<32) to 4 bytes (binary) in bash

bashbinaryfloating pointshell-script

Example:

$ decimal=$(( RANDOM << 17 | RANDOM << 2 | RANDOM >> 13 ))
$ echo $decimal
$ printf "%08x" $decimal | xxd -r -p >bytes

The result is in bytes file.

Can it be done in a single command without unnecessary conversion to hex first?

Best Answer

You can use perl:

$ perl -e 'print pack "I>", shift' $(( RANDOM << 17 | RANDOM << 2 | RANDOM >> 13 ))