从C中的十六进制字符串获取uint

从C中的十六进制字符串获取uint,c,string,hex,type-conversion,C,String,Hex,Type Conversion,假设我有一个名为code的char*,其中有“0x41” char *code = "0x41"; 如何将其转换为无符号int?(确切地说,我需要一个字,但那只是一个无符号int)。我想你的意思是声明为char*code=“0x41”的变量指向由“0x41”表示的字符串 C中没有字,但如果您将其类型定义为无符号整数,则可以将此十六进制数字字符串转换为无符号整数,如下所示: char *code = "0x41"; unsigned int foo; assert(sscanf(code, "%

假设我有一个名为code的
char*
,其中有
“0x41”

char *code = "0x41";

如何将其转换为
无符号int
?(确切地说,我需要一个
字,但那只是一个
无符号int
)。

我想你的意思是声明为
char*code=“0x41”的变量
指向由
“0x41”
表示的字符串

C中没有
,但如果您将其类型定义为
无符号整数
,则可以将此十六进制数字字符串转换为
无符号整数
,如下所示:

char *code = "0x41";
unsigned int foo;
assert(sscanf(code, "%X", &foo) == 1);
您可能会注意到在此代码中使用了
assert
。我建议将该断言替换为逻辑,以便在返回值不是1时报告错误,因为这将表明字符串的格式不正确,无法按照指定的格式进行解析

unsigned int h;
sscanf(code, "%x", &h);
编辑考虑到ExP的备注:
%x
可以捕获字符串中的值
“0x41”

\include
#包括
int main(){
char*code=“0x41”;
char*ck;
长未签名的lu;
lu=标准(代码和对照,16);
printf(“%lu\n”,lu);
返回0;
}

您可以使用strtol函数将字符串转换为任意基的无符号长整数


实际上,
0x
“Ox%X”
中是多余的,因为
%X
应该会捕捉到它(它对我来说是多余的)。我不明白为什么会得到
-1
。当然,这家伙很困惑,但这是一个合法的编码问题(相比之下,其他很多连续性问题是“我应该选择什么框架”)。它为新来者创造了一个充满敌意的环境。别担心,要快乐!投票人可能没有什么重要的话要说。。。记住,数字只是一个你有多大帮助的指标,根据你的数字,你已经相当有帮助了。无论如何这里,有一个+1@可修改的左值谢谢
#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;
}