读取磁盘块作为位图
我想读一下包含块位图,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位图工作。这将修复代码,但逻辑错误。
任何想法?
线条
for(t=0; t<8;t++) printf("%d\t",bits[t]);
打印位在位置0(最低显著一个)的第一和第7位(最显著)最后的比特。正如你希望它是相反的方式,改变回路:
for(t=7; t>=0;t--)
或类似。
我得到它交换。但我的代码适用于正常的对话。例如,它打印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
。 或者反向运行你的循环。
你的循环有点不对。也许'for(j = 7; j> = 0; - j)'。 – ssteinberg 2011-05-13 21:44:25