0

ブロック ビットマップと inode ビットマップを含むブロックを読み込もうとしています

ブロックを unsigned char 配列として読み取り、次のようにバイナリに変換します。

for (i = 0; i < 4096; i++) {
    for (j = 8; j <=0 ; j--) {
        bits[j] = bitmap[i]%2;
        bitmap[i] = bitmap[i]/2;
    }
    for(t=0; t<8;t++)
        printf("%d\t",bits[t]);
    printf("\n");
    }

char に「0」を入れて次のように出力すると

printf("%d",'0');

私は48を取得し、ビット配列には00110000が含まれていますこれは機能しますが、inodeビットマップをチェックすると機能しません。たとえば、ビットマップは次のとおりです。

1 1 1 0 0 0 0
しかし、私は
0 0 0 0 1 1 1 を得る

ブロックビットマップで同じことが起こるかどうかを確認できませんでした。

繰り返しますが、コードは通常の会話として機能します。たとえば、48 を出力する char '0' に対して 00110000 を出力します。これは 48 です。このスワッピングは、inode ビットマップで発生します。私が変更すると、inodeビットマップで機能しますが、ブロックビットマップで機能するようになるにはどうすればよいですか。これでコードは修正されますが、ロジックが間違っています。

何か案が?

4

2 に答える 2

0

台詞

for(t=0; t<8;t++)
        printf("%d\t",ビット[t]);

位置 0 (最下位) のビットを最初に出力し、位置 7 (最上位) のビットを最後に出力します。逆にしたい場合は、ループを次のように変更します。

for(t=7; t>=0;t--)

または類似。

于 2011-05-13T21:41:54.363 に答える
0

ビットオーダーがビッグエンディアンとリトルエンディアンで入れ替わっているようです。 http://en.wikipedia.org/wiki/Endiannesshtonl, htons, ntohl, ntohs関数ファミリーと 交換できます。試してみてくださいman htons。またはループを逆に実行します。

于 2011-05-13T21:42:57.250 に答える