2011-12-22 90 views
0

有人可以为我分解这段代码吗?我知道它改变了用户文件中的文本,我知道它对我来说可能非常有用。 “〜”的目的是什么?我怎样才能修改这个代码来逐字阅读一个用户文件,然后用相同的公式来改变它?更改文件内容

// first value in the file is the key 
if (fread(&key, sizeof(char), 1, infile)) 
{ 
    key = ~key; 
} 
while(fread(&fval ,sizeof(short), 1, infile)) 
{ 
     fputc((fval/2) - key, outfile); 
} 
+2

'key =〜key'将'key'设置为'key'的位反转。 – 2011-12-22 16:48:30

+0

按位反转...对我来说毫无意义我会把字典拿出来! – adohertyd 2011-12-22 16:50:30

+0

目前还不清楚你在这里期待什么。你有什么尝试? – Nick 2011-12-22 16:50:52

回答

2

key = ~key掉所有的关键

位你知道位?

ASCII A(65)为100 0001在二进制的,所以 '〜' 的这个简单地交换各个10并且每个01给予011 1110(62),其是>

因此,这将替换文档中的所有A都与>相似,对于其他任何字符也是如此。关于〜的好处在于它的解密过程完全相同 - 只需交换每一位。

ps。这不完全是密码加密!

+0

那么,如果我只想给A添加5呢?这些交换位都没有?只需简单阅读A,将5添加到它,并输出到一个新的文件?并为文件中的每个字符重复该过程? – adohertyd 2011-12-22 17:02:17

+0

然后,只需键+ = 5,字符只是在计算机中的数字 – 2011-12-22 17:04:55

1

评论内嵌!

#include <stdio.h> 

int main(void) 
{ 
    /* Integer value of 'A' is 65 and 
     binary value is 01000001 */ 
    char a='A';  
    printf("a=%d\n", a); 

    /* ~a is binary inverse of a so 
     ~01000001 = 10111110 */ 
    a=~a; 
    printf("a=%d\n", a); 

    /* easier example */ 
    /* ~0 = 11111111 times # of bytes needed 
     to store int (whose value is nothing 
     but negative one) */ 

    int i=0; 
    printf("i=%d\n", i); 

    i=~i; 
    printf("i=%d\n", i); 

    return 0; 
} 

$ ./a.out 
a=65 
a=-66 
i=0 
i=-1 
$ 

有了上述提示,您可以试试看代码并分享您的意见。

OTOH,什么是crypt?它的类型是什么?它存储在什么值?!

更多按位操作请参考this页面!

+0

我现在明白了,〜代替所有1的0和所有0与1的二进制正确吗?对不起,地穴是关键! – adohertyd 2011-12-22 17:08:25

+0

是的!你是对的! – 2011-12-22 17:15:05