【问题标题】:C# strange codeC#奇怪的代码
【发布时间】:2010-08-09 01:58:29
【问题描述】:
Anyone know what follow code does?

问题是关于跟随运算符:& 和 |,and 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));

【问题讨论】:

  • 您确实意识到在这些行的正上方有一条注释解释了它的作用?
  • 您到底对什么感到困惑?如果您对代码或注释感到困惑,您能否详细说明是什么让您感到困惑?
  • 问题是关于跟随运算符:&和|,and 0xfc
  • ozsenegal:您能否将其添加到您最初的问题中?也许删掉一些你也不需要问它的代码?现在,您的问题太模糊,无法回答。

标签: c# arrays byte


【解决方案1】:

问题是关于跟随运算符:& 和 | 和 0xfc

【讨论】:

    【解决方案2】:

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

    1. 按位执行and on salt[i] 和一个十六进制数字(& 运算符)。
    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(如 16是基础)。

    另见:

    【讨论】:

      【解决方案3】:
      // Split salt length (always one byte) into four two-bit pieces and
      // store these pieces in the first four bytes of the salt array.
      

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

      【讨论】:

      • 大概他的意思是问它是怎么做的,而不是它做了什么。当然,为什么会这样是更有趣的问题。
      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 2015-03-24
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2017-08-25
      • 2023-04-01
      相关资源
      最近更新 更多