2011-12-22 122 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