2

我在 CentOS 5.5 的缩小版本上运行,没有很多可用的工具。没有 xxd、bc 或 hd。不幸的是,我无法安装任何其他实用程序。我确实有 od、dd、awk 和 bourne shell(不是 bash)。我正在尝试做的事情在正常环境中相对简单。基本上,我有一个数字,比如 100,000,我需要将它的二进制表示形式存储在一个文件中。通常,我会做类似...

printf '%x' "100000" | xxd -r -p > file.bin

如果您查看文件的十六进制转储,您会正确看到表示为 186A0 的数字。

有没有我可以使用我可用的有限工具拼凑起来的等价物?我尝试过的几乎所有东西都存储了数字的 ascii 值。

4

1 回答 1

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)逻辑。

于 2012-05-31T21:57:43.073 回答