C#奇怪的代码

时间:2010-08-09 01:58:30

标签: c# arrays byte

Anyone know what follow code does?

问题是跟随运营商:&和|,和0xfc

    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));

3 个答案:

答案 0 :(得分:3)

  

问题是跟随运营商:&和|,和0xfc

答案 1 :(得分:2)

上面的评论很好地解释了它正在做什么,但是如果你正在寻找运营商的细分:

  1. 按位执行and salt[i]和十六进制数字(&运算符)。
  2. and上执行按位salt[i] 和第二个十六进制数字。
  3. 对步骤1和2(or运算符)的结果执行按位|
  4. 将步骤3的结果投射到byte
  5. 将结果存储在salt[i]
  6. 结果是注释块中注明的内容。格式0xc0的数字以及十六进制的数字,这是16的基数。十六进制中的c0相当于十进制的16*12 + 16*0 = 192。在十六进制中,由于您在9处用完了数字,因此您开始使用字母。因此,a = 10,b = 11,c = 12,d = 13,e = 14,f = 15,f变为最高的“数字”,因为当你到达16时你会移动一个地方(16是基础)。

    另见:

答案 2 :(得分: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.

这是一个自大的答案,但我的目的是表明它已经回答了,所以如果您需要更多细节,请告诉我:))