C sscanf ("%hhx") 读取 unsigned int 而不是 unsigned char

标签 c scanf

我们使用 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/

相关文章:

c - 如果两个数组完全不同则返回 1,如果存在公共(public)元素则返回 0 的函数

c - C++中如何输入小数?

c - ENC28J60 停止接收

c - 从 C 文件中读取字符串和整数的组合

无法将 BLAS 库与 Clion 2016.1.2 和 Fedora 22 链接,获取 undefined reference

c++ - 我在哪里可以找到 NS2 库的 cpp 文件中生成的打印信息,其中我添加了一些 cout() 函数来打印一些信息?

c - sscanf 坏了吗?

c - 使用 fscanf 从给定行读取

写入内存时 scanf C 中的 char[] 与 char*

c - 在函数开头定义变量和 "fprintf"