C # странный код - PullRequest
       4

C # странный код

0 голосов
/ 09 августа 2010
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 ]

3 голосов
/ 09 августа 2010

речь идет о следующих операторах: & и |, и 0xfc

2 голосов
/ 09 августа 2010

Хорошо, приведенный выше комментарий объясняет, что он делает, но если вы ищете разбивку операторов:

  1. Выполните побитовое and для salt[i] и шестнадцатеричное число (& оператор).
  2. Выполнить побитовое and для salt[i] и второе шестнадцатеричное число.
  3. Выполнить побитовое or для результата шагов 1 и 2 (| оператор).
  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является базой).

См. также:

0 голосов
/ 09 августа 2010
// Split salt length (always one byte) into four two-bit pieces and
// store these pieces in the first four bytes of the salt array.

Это дерзкий ответ, но я намерен указать, что он уже получен, поэтому, пожалуйста, дайте мне знать, если вам нужно больше подробностей:)

...