2016-11-17 5 views
2

При попытке осуществить сеанс IKE алгоритмы генерации ключей я наткнулся на следующие фрагменты кода для следующей реализации алгоритма алгоритма для генерации определенного сеансового ключаразница между 2 против « 2»

SKEYID_e = HMAC (SKEYID, SKEYID_a || gxy || CKY-I || CKY-R || 2)

осуществление, чтобы получить последнюю конкатенацию HMAC из цифр 2

hmac_update(ctx, (unsigned char *) "\2", 1)

здесь hmac_update является API используется для сцепить б uffer, чтобы получить HMAC перед завершением дайджесты, а CTX - контекст HMAC «\ 2» добавляет цифру 2, а 1 - размер буфера.

Мой вопрос заключается в чем разница между ними и спасся unsigned char *"\2" и значение char/uint8_t2

ответ

6

Разница заключается в том, что char с числовым значением 2 и строкой "\2" является то, что первым является char, а второй является буквальным, представляющими собой массив символов, содержащего char с числовым значением 2, а затем char с числовым значением 0 Другими словами:

  • (char)2 - это один символ. Его тип: char. Его значение равно 2.
  • "\2" представляет собой массив символов. Его тип распадается до const char*. Его первая запись 2 и его вторая запись 0.

С hmac_update ожидает в качестве второго аргумента указатель на байты для использования в обновлении, вы не можете предоставить 2 или (char)2 в качестве аргумента, так как делать поэтому попробуйте преобразовать целое число в указатель (oops). Использование "\2" решает эту проблему, предоставляя указатель на данный байт. Вы также можете сделать что-то вроде этого:

const char value = 2; 
hmac_update(ctx, &value, 1); 
-1

«2» описывает символ с шестнадцатеричным кодом 2 (который является непечатаемых символов, проверьте http://ascii-table.com/info.php?u=x0002) ;
Цифра «2» имеет шестнадцатеричный код 0x050 = 50, как и печатный символ «2».

+1

Я не верю, что это отвечает на вопрос OP - они просят о разнице между «в' char' с числовым значением 2' и '» \ 2" ' , а не о различии между «символом» «2» и «символом» \ 2''. – templatetypedef