将字符串中的转义十六进制转换为c中的int

将字符串中的转义十六进制转换为c中的int,c,C,我正在尝试将转义的十六进制值转换为整数。我该怎么做呢 我已经用strtolstrtol试过了,但是只有在十六进制没有转义的情况下,才会产生正确的数字 int number = (int)strtol("0x10", NULL, 16); //16 int number = (int)strtol("\x10", NULL, 16); //0 “0x10”表示包含4个字符(加上结尾的NUL字节)的C字符串,'0',后跟'x',后跟'1',后跟'0' “\x10”表示包含1个字符(加上结尾的NUL

我正在尝试将转义的十六进制值转换为整数。我该怎么做呢

我已经用strtol
strtol
试过了,但是只有在十六进制没有转义的情况下,才会产生正确的数字

int number = (int)strtol("0x10", NULL, 16); //16
int number = (int)strtol("\x10", NULL, 16); //0
“0x10”
表示包含4个字符(加上结尾的NUL字节)的C字符串,
'0'
,后跟
'x'
,后跟
'1'
,后跟
'0'

“\x10”
表示包含1个字符(加上结尾的NUL字节)的C字符串,即ASCII表的第16个字符。编译器通过自己进行转换来解释字符串的内容,从而用其值替换完整序列
\0x10
。然后,
strtol
无法将其理解为十六进制数表示,然后返回0:

strtol
manual:如果无法执行有效转换,则返回零值 (0升)

读取。

“0x10”
表示包含4个字符(加上结尾的NUL字节)的C字符串,
'0'
,后跟
'x'
,后跟
'1'
,后跟
'0'

“\x10”
表示包含1个字符(加上结尾的NUL字节)的C字符串,即ASCII表的第16个字符。编译器通过自己进行转换来解释字符串的内容,从而用其值替换完整序列
\0x10
。然后,
strtol
无法将其理解为十六进制数表示,然后返回0:

strtol
manual:如果无法执行有效转换,则返回零值 (0升)


读取。

如果您转义,则编译器将自行进行翻译,然后字符串不代表正确的十六进制值。如果您这样做:
int n=“\x10”[0];printf(“%d\n”,n)
您将看到转义的十六进制值按原样编码到字符中。
“\x10”
是一个包含两个字符的字符串,一个值为
16
,另一个是NUL终止符<代码>“0x10”是以NUL结尾的十六进制数字的正确字符串表示形式,strtol希望将其作为参数传递。对于第一种情况,要获取十六进制数,需要执行
(int)(*“\x10”)
。如果转义,则编译器将自行进行转换,然后字符串不表示正确的十六进制值。如果执行此操作:
int n=“\x10”[0];printf(“%d\n”,n)
您将看到转义的十六进制值按原样编码到字符中。
“\x10”
是一个包含两个字符的字符串,一个值为
16
,另一个是NUL终止符<代码>“0x10”是以NUL结尾的十六进制数字的正确字符串表示形式,strtol希望将其作为参数传递。对于第一种情况,要获取十六进制数,需要执行
(int)(*“\x10”)