从Hex转换为Dec C / C ++

时间:2018-06-08 19:19:28

标签: hex decimal

我遇到转换问题。我的程序可以从十进制转换为十六进制,但不能从十六进制转换为十进制。请帮帮我。

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;}

1 个答案:

答案 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);