在C语言中从十六进制字符串获取无符号整型数

3
假设我有一个名为code的char*,其中包含"0x41"
char *code = "0x41";

如何将它转换为unsigned int?(确切地说,我需要一个WORD,但那只是一个unsigned int)。


我不明白为什么这个问题会被评为“-1”。虽然那个人有点困惑,但这是一个合法的编程问题(相比于其他大量的“我应该选择哪个框架”的连续问题)。这会给新手带来敌对的环境。 - Adam Gent
4个回答

6
unsigned int h;
sscanf(code, "%x", &h);

编辑 考虑到ExP的评论: %x可以捕获字符串"0x41"中的值。


不要担心,开心点!-1 投票者可能没有什么重要的话要说......记住,数字只是你有多帮助的指标,根据你的数字,你已经相当有帮助了。无论如何......这里,给你一个 +1! - autistic

4

我理解您的意思是,声明为char *code = "0x41";的变量指向由"0x41"表示的字符串。

C语言中没有WORD这种类型,但如果您将其typedef为unsigned int,那么可以像下面这样将这个十六进制数字字符串转换为unsigned int

char *code = "0x41";
unsigned int foo;
assert(sscanf(code, "%X", &foo) == 1);

你可能注意到了这段代码中使用了assert语句。我建议将该断言替换为逻辑以在返回值不为1时报告错误,因为这意味着字符串不符合规定的解析格式。


实际上,在“Ox%X”中,0x是多余的,因为“%X”应该可以捕获它(对我来说确实如此)。 - Elmar Peise

3
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *code = "0x41";
    char *ck;
    long unsigned lu;

    lu=strtoul(code, &ck, 16);
    printf("%lu\n", lu);

    return 0;
}

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接