【问题标题】:read a disk block as bitmap将磁盘块读取为位图
【发布时间】:2011-08-25 06:39:46
【问题描述】:

我正在尝试读取包含块位图和 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 位图时 这是行不通的 例如位图是:

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

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

重复一遍,代码可以正常工作,例如它打印 00110000 即 48,对于 char '0' 也打印 48。这种交换发生在 inode 位图上。 当我更改它时,它将适用于 inode 位图,但我现在如何才能适用于块位图。这将修复代码但逻辑错误。

有什么想法吗?

【问题讨论】:

  • 你的循环有点错误。也许'for (j=7;j>=0;--j)'。

标签: c bitmap inode


【解决方案1】:

线条

对于(t=0;t

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

对于(t=7;t>=0;t--)

或类似的。

【讨论】:

  • 我知道它被交换了。但我的代码适用于正常对话。例如,它为“0”打印 48,而 0011000 也是 48。但这不适用于 inode 位图。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多