2对"\ 2"的区别

cmi*_*idi 2 c security ipsec

在尝试实现IKE会话密钥生成算法时,我遇到了以下代码片段,用于以下算法实现,用于生成特定会话密钥的算法

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

实现以获得数字2的最后连接HMAC

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

这里hmac_update是用于连接缓冲区以在最终确定摘要之前获取HMAC的API,而CTX是HMAC上下文"\ 2"正在添加数字2和1是缓冲区的大小.

我的问题是和转义unsigned char * "\2"char/ uint8_t值之间的区别是什么2

tem*_*def 6

区别在于char数字值为2且字符串"\2"为前者为a 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);
Run Code Online (Sandbox Code Playgroud)