将磁盘块读取为位图

时间:2011-05-13 21:36:40

标签: c bitmap inode

我正在尝试读取包含块位图和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");
    }

当我将'0'加到char并将其打印为

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

我得到48 我的位数组包含00110000 这工作,但是当我检查inode位图时 这是行不通的 例如,位图是:

1 1 1 0 0 0 0
但我得到了 0 0 0 0 1 1 1

我无法检查块位图是否发生同样的事情。

重复一遍,代码正常会话,例如它打印00110000,即48,对于char'0'打印48也是如此。使用inode位图进行此交换。 当我改变它将适用于inode位图但我现在怎么能用于blok位图。这将修复代码,但逻辑错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

首先打印位置0(最低有效位)的位和最后位置7(最高有效位)的位。如您所希望的那样,将循环更改为:

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

或类似。

答案 1 :(得分:0)

看起来您的位顺序已被交换 big-endian vs little endian。 http://en.wikipedia.org/wiki/Endianness 您可以与htonl, htons, ntohl, ntohs系列函数交换。试试man htons。 或反向运行你的循环。