首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带xxd的xxd -r

不带xxd的xxd -r
EN

Stack Overflow用户
提问于 2012-06-01 04:21:53
回答 1查看 15.5K关注 0票数 2

我使用的是精简版的CentOS 5.5,没有太多可用的工具。无xxd、bc或hd。不幸的是,我不能安装任何额外的实用程序。我有od、dd、awk和bourne shell (不是bash)。在正常的环境中,我尝试做的事情相对简单。基本上,我有一个数字,比如说100,000,我需要将它的二进制表示存储在一个文件中。通常,我会做这样的事情...

代码语言:javascript
复制
printf '%x' "100000" | xxd -r -p > file.bin

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-01 05:57:43

您可以使用printf、awk和shell的组合来完成此任务。

代码语言:javascript
复制
#!/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("\"");
}

然后你就可以这样做

代码语言:javascript
复制
$ printf '%x' "100000" | awk -f ascii_to_bin.awk | /bin/sh > output.bin

如果您知道目标二进制文件的长度,您可以只执行一个printf "%0nX" (n是目标大小),然后删除(len % 2)逻辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10840717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档