我使用的是精简版的CentOS 5.5,没有太多可用的工具。无xxd、bc或hd。不幸的是,我不能安装任何额外的实用程序。我有od、dd、awk和bourne shell (不是bash)。在正常的环境中,我尝试做的事情相对简单。基本上,我有一个数字,比如说100,000,我需要将它的二进制表示存储在一个文件中。通常,我会做这样的事情...
printf '%x' "100000" | xxd -r -p > file.bin如果您查看该文件的十六进制转储,您将正确地看到表示为186A0的数字。
有没有等价物可以用我有限的工具拼凑起来?我尝试过的几乎所有东西都存储了数字的asci值。
发布于 2012-06-01 05:57:43
您可以使用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)逻辑。
https://stackoverflow.com/questions/10840717
复制相似问题