如何在bash中将无符号十进制(小于1<<32)转换为4字节(二进制)?

jfs*_*jfs 4 bash shell-script binary floating-point

例子:

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

结果在bytes文件中。

是否可以在单个命令中完成,而无需先将其不必要地转换为十六进制?

Gil*_*il' 5

您可以使用printf内置函数发出八进制代码给出的字节。

x=1193046
printf "$(printf "\\%03o" $((x>>24&255)) $((x>>16&255)) $((x>>8&255)) $((x&255)))"
Run Code Online (Sandbox Code Playgroud)