2

多くのツールが利用できない状態で、CentOS5.5の縮小バージョンで実行しています。xxd、bc、またはhdはありません。残念ながら、追加のユーティリティをインストールすることはできません。私はod、dd、awk、およびbourneシェル(bashではない)を持っています。私がやろうとしていることは、通常の環境では比較的単純です。基本的に、私には100,000などの数値があり、そのバイナリ表現をファイルに保存する必要があります。通常、私は次のようなことをします...

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

ファイルの16進ダンプを表示すると、186A0として表される番号が正しく表示されます。

私が利用できる限られたツールを使用して一緒に石畳にすることができる同等のものはありますか?私が試したほとんどすべてが、数字のASCII値を格納します。

4

1 に答える 1

2

printf、awk、およびシェルを組み合わせて実行できます。

#!/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 に答える