繁体   English   中英

使用fscanf(文件,%x,x)并将十六进制转换为C中的整数

[英]using fscanf(file, %x, x) and converting hex to ints in C

我想使用fscanf来检查某些内容是否为十六进制数。 例如,我想打电话

if(fscanf(file,"%x", &u))

就像一个人可以用字符串和整数来调用它。 问题是:首先,你应该是什么类型的? 其次,一旦我得到这个十六进制,即如果if语句通过,我怎么能把你转换成一个整数?

注意:我想要

if(fscanf(file, "%x", &u) == 1)

如果读入的数字是0x_ _则为true,否则为false。 我努力了

if(fscanf(file, "0x%x", &u) == 1)

但对于十六进制数字,它返回false

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);
    }
}

关于@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();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM