我正在运行缩小版的CentOS 5.5而没有很多工具可用。没有xxd,bc或hd。遗憾的是,我无法安装任何其他工具。我确实有od,dd,awk和bourne shell(不是bash)。我想要做的是在正常环境中相对简单。基本上,我有一个数字,比如100,000,我需要将它的二进制表示存储在一个文件中。通常情况下,我会做类似的事情......
printf '%x' "100000" | xxd -r -p > file.bin
如果查看文件的十六进制转储,您可以正确地看到代表186A0的数字。
我是否可以使用我现有的有限工具拼凑起来?几乎我尝试过的所有东西都存储了数字的ascii值。
答案 0 :(得分:2)
你可以结合使用printf,awk和shell来实现它。
#!/usr/bin/env awk
# ascii_to_bin.awk
{
# Pad out the incoming integer to a full byte
len = length($0);
if ( (len % 2) != 0) {
str = sprintf("0%s", $0);
len = len + 1;
}
else {
str = $0;
}
# Create your escaped echo string
printf("echo -n -e \"");
for(i=1;i<=len;i=i+2) {
printf("\\\\x%s", substr(str, i, 2));
}
printf("\"");
}
然后你可以做
$ printf '%x' "100000" | awk -f ascii_to_bin.awk | /bin/sh > output.bin
如果您知道目标二进制文件长度,则只需执行printf "%0nX"
(n
是目标大小)并删除(len % 2)
逻辑。