如何将包含数字的字符串转换为二进制表示?

时间:2014-07-31 07:25:29

标签: bash

我使用以下命令检索文件的大小:

du -b foo.txt | awk '{print $1}'

我们说这会输出1337

如何将此字符串中的数字转换为它的二进制表示形式(例如)4字节整数(如C中的atoi)并将该数据写入文件?

必须能够指定endianess将是一件好事。

如果有人知道这个问题的好标签,请随时添加。

2 个答案:

答案 0 :(得分:1)

xxd -b

quoted manpage : xxd创建给定文件或标准输入的十六进制转储。它还可以将十六进制转储转换回其原始二进制形式。像uuencode(1)和uudecode(1)一样,它允许在“邮件安全”中传输二进制数据。 ASCII表示,但具有解码到标准输出的优点。而且,它可以用于执行二进制文件修补。

-b选项切换到位转储,而不是hexdump。此选项将八位字节写为八位" 1" s和#34; 0" s而不是正常的十六进制转储。每行前面都有一个十六进制的行号,后面跟着一个ascii(或ebcdic)表示。命令行开关-r,-p,-i不适用于此模式。

答案 1 :(得分:1)

使用Bash:

number=1234

printf -v t '%08x' "$number"
# This form may not be necessary:
# printf -v t '%08x' "$(( number & 0xFFFFFFFF ))"
l=${#t}

# Little endian format.
hex_le="\\x${t:l-2:2}\\x${t:l-4:2}\\x${t:l-6:2}\\x${t:l-8:2}"
printf "$hex_le" > file

# Big endian format.
hex_be="\\x${t:l-8:2}\\x${t:l-6:2}\\x${t:l-4:2}\\x${t:l-2:2}"
printf "$hex_be" > file