我遇到转换问题。我的程序可以从十进制转换为十六进制,但不能从十六进制转换为十进制。请帮帮我。
int main(){
string liczba;
while(cin>> liczba){
int number = atoi(liczba.c_str());
if(number==-1){
break;
}
else{
if(liczba[0]==0 && liczba[1]=='x'){
printf("%d\n", number);
}
else{
printf("0x%X\n", number);
}
}}
return 0;}
答案 0 :(得分:0)
如果输入字符串以“0x”开头,则atoi()
将始终返回0,因为当它看到非数字字符(在本例中为“x”)时将停止检查字符串。因此,对于十六进制输入,number
将始终为0。
最简单的解决方案是使用strtol()
代替atoi()
。使用strtol()
参数0调用的base
将识别“0x”前缀,然后将以下字符视为十六进制数字,这是您的程序所需要的。这看起来像这样:
number = strtol(liczba.c_str(), NULL, 0);
如果您的平台没有strtol()
,那么下一个最简单的解决方案是使用sscanf()
,它也理解“0x”前缀:
sscanf(liczba.c_str(), "%i", &number);