我正在尝试使用sscanf
. 结果不正确,对于值 0x01,sscanf
返回一个 0 (0)。
根据C++ Reference,“%u”说明符的定义(突出显示是我的):
i, u Integer 任意数量的数字,可选地以符号(+或-)开头。默认采用十进制数字 (0-9),但 0 前缀引入八进制数字 (0-7)和 0x 十六进制数字 (0-f)。
根据 Harbison & Steele,第 3 版:
u 转换 执行无符号十进制转换。strtol
...读取的数字格式与参数值为 10的函数输入的预期格式相同base
;这是一个十进制数字序列,可选地以 - 或 + 开头。
请注意,其中一个定义允许在字符串中指定“0x”。
我正在使用 IAR EW 编译器,并将编译设置为 C99 方言。
哪个定义对 C99 是正确的?
我在以下程序中收到两个不同的结果。
这是一个测试程序:
#include <stdio.h>
int main(void)
{
const char text[] = "0x01 1";
unsigned int first_value = 0U;
unsigned int second_value = 0U;
signed int arguments_satisfied = 0;
arguments_satisfied = sscanf(text, "%u %u", &first_value, &second_value);
printf("Arguments scanned: %d, first: %d, second: %d\n",
arguments_satisfied, first_value, second_value);
return EXIT_SUCCESS;
}