读取磁盘块作为位图

问题描述:

我想读一下包含块位图,inode位读取磁盘块作为位图

我读了块作为一个无符号的字符数组 比我将其转换为二进制如下块:

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位 它不工作 例如一个位图:

但我得到

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

要重复,代码工作正常对话,例如它打印00110000这是48,为字符'0'打印48也。这种交换与inode位图一起发生。 当我改变它将适用于inode位图,但我现在怎么可以为blok位图工作。这将修复代码,但逻辑错误。

任何想法?

+0

你的循环有点不对。也许'for(j = 7; j> = 0; - j)'。 – ssteinberg 2011-05-13 21:44:25

线条

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

打印位在位置0(最低显著一个)的第一和第7位(最显著)最后的比特。正如你希望它是相反的方式,改变回路:

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

或类似。

+0

我得到它交换。但我的代码适用于正常的对话。例如,它打印48为'0'和0011000这也是48.但这不适用于inode位图。 – Ozan 2011-05-13 21:55:19

看起来像你的位顺序交换 big-endian vs little endian。 http://en.wikipedia.org/wiki/Endianness 你可以用htonl, htons, ntohl, ntohs功能系列交换。尝试man htons。 或者反向运行你的循环。