gpt4 book ai didi

c - 2 与 "\2"之间的区别

转载 作者:行者123 更新时间:2023-12-04 12:12:31 25 4
gpt4 key购买 nike

在尝试实现 IKE session key 生成算法时,我遇到了以下算法实现的代码片段生成某个 session key 的算法

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

最佳答案

区别在于数值为2的char和字符串"\2"是前者是一个char而后者是一个char第二个是表示字符数组的文字,其中包含数值为 2 的 char 和数值为 0 的 char。换句话说:

  • (char)2 是单个字符。它的类型是char。其值为2。
  • "\2" 是一个字符数组。它的类型衰减为const char*。它的第一个条目是 2,第二个条目是 0。

由于 hmac_update 需要一个指向更新中使用的字节的指针作为其第二个参数,因此您不能提供 2(char)2 作为参数,因为这样做会尝试将整数转换为指针(哎呀)。使用 "\2" 通过提供指向相关字节的指针来解决此问题。你也可以这样做:

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

关于c - 2 与 "\2"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com