Bash shell:将十进制数转换为本机十六进制数

Bash shell:将十进制数转换为本机十六进制数,bash,shell,hex,endianness,hexdump,Bash,Shell,Hex,Endianness,Hexdump,下面我有一个简单的C程序,它将int作为输入,并将内存布局转储到终端: # cat foo.c #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int i, foo = atoi(argv[argc-1]); unsigned char *c = (void*)&foo; for (i = 0; i < 4; i++)

下面我有一个简单的C程序,它将int作为输入,并将内存布局转储到终端:

# cat foo.c 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i, foo = atoi(argv[argc-1]);
    unsigned char *c = (void*)&foo;

    for (i = 0; i < 4; i++)
        printf("%02x ", c[i]);
    printf("\n");
    return 0;
}
我需要的格式正好是这样的,即十六进制转储(由空格分隔)和本机endian(换句话说,十进制如何存储在mem中)

是否有一种方法可以在bash中实现同样的效果?到目前为止,我得到的最接近的结果是:

# echo 1 | xargs printf "%08x\n" | sed 's/../& /g'
00 00 00 01 

但是可以看出,这打印十六进制值,但不是它在小端上的内存驻留方式。

大多数现代语言要么需要在每个本机环境中重新编译(这些可以看到端值),要么是跨平台的(这些不能)。如果您将编译好的C代码从PC移动到Sun SPARCstation,它将无法运行而不重新编译,但是
bash
脚本应该在这两个地方都能工作,所以我认为它不会做您想要的事情。我的意思是它不需要是纯bash/shell,但是一些基本工具,如od/xxd/hextump/bc等,已经打包在给定的arch上,可以实现这个目的。我以为这样的工具已经以某种形式存在了,只是我不知道它(因此我在这个论坛上提出了问题)。这就可以做到:
perl-e'print-join(“”,unpack((H2)8),pack(“(L)”,@ARGV)),“\n”'1
啊,perl-你总是设法打破规则,节省时间。
# echo 1 | xargs printf "%08x\n" | sed 's/../& /g'
00 00 00 01