0

GZipデコーダーのコンテキストでは、圧縮されたgzipファイルをバイナリ形式で画面に印刷するためのUNIXツールまたはCソリューションが必要です。私が正確に必要としているのは、8進数、10進数、または16進数ではなく2進数で印刷できるhexdumpです。

私はこのツールが存在することをかなり確信していますが、私はそれを見つけることができません:-(

編集 ユースケースが頻繁であってはならないので、そのようなエディターを見つけるのは難しいと思います。私の場合、ファイルが非常に小さく、数バイトにまたがる可能性のある10010011などのバイナリ「パターン」を検索するためのデバッグ目的が必要です。

4

7 に答える 7

2
perl -ne 'print unpack(B8,$_),$/for split//' FILE

または1行に8つの要素を含める

perl -ne 'print unpack(B8,$_),++$i%8?" ":"\n"for split//;END{print"\n"}' 

改行なし

perl -ne 'print unpack(B8,$_)for split//' FILE
于 2012-07-20T14:08:02.897 に答える
1

マヌエルが私に再投稿するように言ったので、私は前回書いた解説を完成させました、そしてここに電話があります:

od -t x1 FILE | sed 'h;x;s:^\(........\).*:\1:;x;s:^........::;s:0:0000:g;s:1:0001:g;s:2:0010:g;s:3:0011:g;s:4:0100:g;s:5:0101:g;s:6:0110:g;s:7:0111:g;s:8:1000:g;s:9:1001:g;s:a:1010:g;s:b:1011:g;s:c:1100:g;s:d:1101:g;s:e:1110:g;s:f:1111:g;H;x;s:\n::'
于 2012-07-20T15:50:31.473 に答える
0
od -t x1 FILE | sed 's:0:0000:g;s:1:0001:g;\
s:2:0010:g;s:3:0011;
...[replace every hex-digit up to F with the bin representation] '
于 2012-07-20T13:30:22.120 に答える
0

私が行った別の回答から(残念ながら現在は見つかりません)int、2進数として出力するこの関数があります:

void print_bin(int n)
{
    for (int i = sizeof(n) * 8 - 1; i >= 0; i--)
        printf("%d", (int) ((n >> i) & 1));
}

ファイルを整数として読み取り、この関数を使用して値を2進数として出力できます。

于 2012-07-20T13:02:03.753 に答える
0

コンパイラはこのユーティリティ関数ltoaをサポートできます

char * ltoa(long value、char * buffer、int radix);

基数=2で表示を簡略化できます

于 2012-07-20T13:25:16.920 に答える
0

ちょっとしたプログラムを書いてください:

#include <stdio.h>

void binarywrite (unsigned char c)
{
    int i = 0;
    for (i = 0; i < 8; i++)
    {
        printf("%1d",(c>>(7-i)) & 1 );
    }
    printf(" ");
}

int main(int argc, char* argv[])
{
    char c = 0;

    if(argc >=2)
    {
        char* pfilename = argv[1];
        FILE *fp;
        fp = fopen(pfilename,"rb");
        char ch;
        while((ch = getc(fp)) != EOF)
        {
            binarywrite(ch);
        }
        fclose(fp);
    }

    return 0;
} 

そして、あなたはそれを'./binarywitefilename'として使うことができます

于 2012-07-20T13:53:51.527 に答える
0

xxd(通常はvimに付属しています)は、バイナリ表現に直接変換できます。

xxd -b FILE

出力のフォーマットを切り取るために、少しawkを追加して、0と1のみのクリーンなストリームを取得できます。

xxd -b FILE | \
    awk '{ for (i=0; i<NF; i=i+1)
           { if ($i ~ /^[01][01][01][01][01][01][01][01]$/) printf $i }
         }; END { print "" }
    '
于 2012-08-05T09:31:26.590 に答える