如果某个内容是十六进制数,我想使用fscanf来检查。 例如,我想打电话
if(fscanf(file,"%x", &u))
就像人们用字符串和整数来调用它一样。问题是这样的: 首先,你应该是什么类型的? 其次,一旦我得到这个十六进制,即如果if语句通过,我怎么能将u转换为整数?
注意: 我想要
if(fscanf(file, "%x", &u) == 1)
如果读入的数字是0x_ _ ,则为真,否则为false。 我试过了
if(fscanf(file, "0x%x", &u) == 1)
但是对于十六进制数字
,它返回false答案 0 :(得分:2)
来自scanf
手册页:
x,X匹配可选的带符号十六进制整数;下一个指针必须是指向 unsigned int 的指针。
您无需执行任何操作即可将其转换为整数,这就是scanf
为您所做的事情。
如果您特别想要匹配0x___
,请将其添加到格式字符串中:
if (fscanf(file, "0x%x", &u) == 1)
我测试的完整代码:
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[])
{
unsigned int u;
if (scanf("0x%x", &u) == 1) {
printf("Read hex: %u\n", u);
} else if (scanf("%u", &u) == 1) {
printf("Read decimal: %u\n", u);
}
}
答案 1 :(得分:0)
关于@Barmar的讨论值得赞扬。
通过sscanf()
或strtol()
读取数据并以多种方式处理。
unsigned u;
char buf[27];
if (scanf("%26[xX0-9A-Fa-f]", buf) != 1)
;//handle_bad_input();
else {
char ch;
if (sscanf(buf, "%u%c", &u, &ch) == 1)
printf("decimal found %u", u);
else if (sscanf(buf, "0x%X", &u) == 1)
printf("hexadecimal found 0x%X", u);
else
;//handle_bad_input();
}