2011-05-13 76 views
0

我想讀一下包含塊位圖,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

回答

0

線條

 
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

0

看起來像你的位順序交換 big-endian vs little endian。 http://en.wikipedia.org/wiki/Endianness 你可以用htonl, htons, ntohl, ntohs功能系列交換。嘗試man htons。 或者反向運行你的循環。