繁体   English   中英

将磁盘块读取为位图

[英]read a disk block as bitmap

我正在尝试读取包含块位图和inode位图的块

我将块读取为无符号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,并且我的bits数组包含00110000,但是,当我检查inode位图时,它不起作用,例如,位图是:

1 1 1 0 0 0 0
但我明白了
0 0 0 0 1 1 1

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

重复一遍,该代码可以正常对话,例如,它打印00110000为48,对于char'0',它也打印48。 这种交换发生在inode位图上。 当我进行更改时,它将适用于inode位图,但是现在如何将其用于空白位图。 这将修复代码,但逻辑错误。

任何想法?

线

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

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

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

或类似。

看起来您的位顺序已交换为大端与小端。 您可以与htonl, htons, ntohl, ntohs系列功能互换http://en.wikipedia.org/wiki/Endianness 尝试man htons 或反向运行循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM