2010-08-09 93 views
-1
Anyone know what follow code does? 

問題是關於跟隨運營商:&和|和0xFC有C#奇怪的代碼

salt[0] = (byte)((salt[0] & 0xfc) | (saltLen & 0x03)); 
    salt[1] = (byte)((salt[1] & 0xf3) | (saltLen & 0x0c)); 
    salt[2] = (byte)((salt[2] & 0xcf) | (saltLen & 0x30)); 
    salt[3] = (byte)((salt[3] & 0x3f) | (saltLen & 0xc0)); 
+7

你知道在這些行的正上方有一個註釋來解釋它的作用嗎? – Joey 2010-08-09 01:59:34

+0

究竟是什麼讓你困惑?如果你對代碼或評論感到困惑,你能詳細說明什麼讓你感到困惑嗎? – 2010-08-09 02:01:07

+0

問題是關於跟隨運算符:&和|,和0xfc – ozsenegal 2010-08-09 02:01:36

回答

2

那麼上面的評論解釋它在做什麼,但如果你正在尋找運營商的細分:

  1. salt[i]和十六進制數(&運算符)上執行按位and
  2. salt[i] 和第二個十六進制數字上執行按位and
  3. 對步驟1和2(|運算符)的結果執行按位or
  4. 延工序3的結果爲byte
  5. 。結果存儲在salt[i]

結果是什麼在註釋塊指出。格式爲0xc0的數字以及不以十六進制表示的數字,即基數爲16的數字。十六進制中的c0等於十進制中的16*12 + 16*0 = 192。在十六進制中,由於您在9位用完數字,所以您開始使用字母。因此,a = 10,b = 11,c = 12,d = 13,e = 14,f = 15,f成爲最高的「數字」,因爲當你達到16時,是基地)。

參見:

0
// Split salt length (always one byte) into four two-bit pieces and 
// store these pieces in the first four bytes of the salt array. 

這是一個自大的答案,但我的目的是要表明,它已經回答了,所以請讓我知道,如果你需要更多的細節:)

+0

大概他的意思是問它是如何做到的,而不是它做什麼。當然,爲什麼它是更有趣的問題。 – MZB 2010-08-09 03:07:20