我们使用 sscanf() 将十六进制值转换为字符串,如下所示:
#include <stdio.h>
#include <string>
int main() {
char data[] = "41424344";
unsigned int result = 0;
sscanf(data, "%hhx", &result);
printf("%x\n", result);
result = 0;
sscanf(data, "%2x", &result);
printf("%x\n", result);
result = 0;
sscanf(data, "%2hhx", &result);
printf("%x\n", result);
return 0;
}
输出:
41424344
41
41
从第一个输出中,我们可以看到 sscanf("%hhx")
读取了整个 4 个字节而不是 1 个字节(“unsigned char”)。为什么?
最佳答案
未定义行为,因为格式说明符和参数类型不匹配。
根据例如this scanf
reference hh
前缀意味着参数必须是 unsigned char *
,这与您传递的 unsigned int *
完全不同。
实际上,%2hhx
格式也存在此问题。
关于C sscanf ("%hhx") 读取 unsigned int 而不是 unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65487379/