2014-10-08 33 views
-2

我正在開發解碼存儲在PPM格式圖片中的祕密消息的任務。我需要做的第一件事是找到消息的長度,它隱藏在圖片的前8個數據字節中的單個字節中。在我有了這個之後,我的邏輯就是創建一個方法,讓我有一個循環移動位7位,記錄第一位,當有8位時,返回它們表示的字符。 所以現在我試圖理解這將如何工作。 我試圖得到隱藏消息長度的值。 我試圖手動執行此操作以查看所有位的行爲。存儲最低級別的位並返回一個字符

fgets(str,64,fp); 
char length[7]; 
length[0] = str[7]; 
length[1] = str[15]; 
length[2] = str[23]; 
length[3] = str[31]; 
length[4] = str[39]; 
length[5] = str[47]; 
length[6] = str[55]; 
length[7] = str[63]; 
printf(length); 

如此以來,長度隱藏在8個字節我用與fgets(STR,64,FP)的最低水平位;然後將每個第8個值存儲在一個數組中。這返回「enpm0dp」。 當我將數組更改爲int時,輸出是一個箭頭。

有人可以向我解釋如何將位存儲到一個字節,然後返回對應於此值的字符?我使用8位數組嗎?或將它們存儲在一個字符串中?

回答

1

你似乎認爲fgets()計數以位爲單位的長度(64爲8個字節),但它確實沒有;它以字符計數。請參閱the documentation

接下來,你似乎認爲str是位ANA rray,但位陣列不存在C.像

你將不得不考慮一個字符數組,這是我們我會假設是字節:

unsigned char str[8]; 

if(fgets(str, sizeof str, fp)) 
{ 
    unsigned char length = 0, i; 

    for(i = 0; i < sizeof str; ++i) 
    { 
    length >>= 1; 
    length |= str[i] & 0x80; 
    } 
} 
+0

我是C新手,並試圖瞭解它是如何工作的,然後再嘗試應用它。 for循環的主體是做什麼的? – 2014-10-08 15:39:24

相關問題