2010-08-09 127 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