如何使用sscanf获得单个字符
我试图使用如何使用sscanf获得单个字符,c,scanf,C,Scanf,我试图使用sscanf将字符串中的单个字符转换为相应的十六进制值 #include <stdio.h> int main () { char *str = "DEADBEEF"; int num; sscanf(str[2],"%x",&num); printf("%x",num); } #包括 int main(){ char*str=“死牛肉”; int-num; sscanf(str[2]、“%x”、&num); print
sscanf
将字符串中的单个字符转换为相应的十六进制值
#include <stdio.h>
int main () {
char *str = "DEADBEEF";
int num;
sscanf(str[2],"%x",&num);
printf("%x",num);
}
#包括
int main(){
char*str=“死牛肉”;
int-num;
sscanf(str[2]、“%x”、&num);
printf(“%x”,num);
}
当我尝试编译时,会收到一条警告,因为sscanf
正在查找char*
而不是单个char
。我可以使用“与”来获取字符的地址(即&str[2]
),但这将读取字符串的其余部分,直到它遇到一个\0
由以下公式求解:
使用
sscanf(&str[2]、“%1x”、&num)
您可以读取单个字符,而不是像sscanf
可以读取的那样大的整数。@lowerer我正在尝试从字符串中读取单个字符,然后将其读取为十六进制。在本例中,我想读取A
(索引2处的字符)并将其转换为值为0xA
的int,然后您想使用&str[2]
,因为这是保存A
的地址(sscanf
需要您正在读取的字符串的地址),但是,然后使用类似于%1x
的方法将单个字符读取为整数,而不是%x
,后者将读取的整数(十六进制数字)与sscanf
可以读取的整数一样大。使用if(sscanf(&str[2],%1x“,&num)!=1){…oops…}
。请参阅。您需要&num
而不是num
。有关错误检查的更完整解决方案,请参见@JonathanLeffler注释。