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

вопрос о следуют операторы: & и |, и 0xFCC# странный код

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

+0

То, что вас смущает? Если вы запутались в коде или комментарии, можете ли вы рассказать о том, что вас сбивает с толку? –

+0

вопрос о следующих операторах: & and | и 0xfc – ozsenegal

ответ

2

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

  1. Выполнить побитовое and на salt[i] и шестнадцатеричное число (оператор &).
  2. Выполнение побитового and по адресу salt[i] и второй номер шестнадцатеричного кода.
  3. Выполнение побитового or на основании результатов шагов 1 и 2 (оператор |).
  4. Cast результат шага 3 к byte
  5. магазин результат в salt[i]

Результатом является то, что отмечается в комментарии блока. Номера формата 0xc0 и еще не шестнадцатеричные, что является базой 16. I.e. c0 в шестнадцатеричном эквиваленте 16*12 + 16*0 = 192 в десятичной системе. В шестнадцатеричном формате, поскольку у вас заканчиваются цифры в 9, вы начинаете использовать буквы. Таким образом, a = 10, b = 11, c = 12, d = 13, e = 14, f = 15, а f становится самой высокой «цифрой», так как вы переместитесь на одно место, когда вы доберетесь до 16 (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

3

вопрос о следуют операторы: & и | и 0xFC

Смежные вопросы