2014-10-08 34 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

相关问题