c++ - 如何正确解释数字(十六进制、十进制、十进制)

标签 c++ numbers string-parsing

我正在尝试编写一个程序,该程序接受十六进制、八进制和小数的输入,将它们存储在整数变量中,并将它们连同它们转换为十进制形式一起输出。例如:

用户输入:0x43、0123、65

程序输出:

0x43 hexadecimal converts to 67 decimal
0123 octal converts to 83 decimal
65 decimal converts to 65 decimal

很明显,我需要一种方法来解释这些数字,但我不确定该怎么做。我尝试了各种方法,例如将它们读入函数并将它们转换为字符串,反之亦然(有关代码示例,请参见 here),但解释数字总是需要转换为某种破坏原始输入的格式。

我唯一能想到的是重载一个 >> 运算符,它一次读取一个字符,如果它在输入的开头看到 0x 或 0,那么它会在读入之前将整个输入存储到一个字符串中一个整数。然后程序将以某种方式必须在输出期间确定正确的操纵器。

不确定是否有更简单的方法来执行此操作,我们将不胜感激。

编辑:这已经解决了,但如果有人感兴趣的话,我决定把代码贴在里面。

#include "std_lib_facilities.h"

void number_sys(string num, string& s)
{
  if(num[0] == '0' && (num[1] != 'x' && num[1] != 'X')) s = "octal";
  else if(num[0] == '0' && (num[1] == 'x' || num[1] == 'X')) s = "hexadecimal";
  else s = "decimal";
}

int main()
{
    cout << "Input numbers in hex, dec, or oct. Use 0xx to cancel.\n";
    string a;

    while(cin >> a){
    if(a == "0xx")break;
    string atype;
    number_sys(a, atype);

    int anum = strtol(a.c_str(), NULL, 0);

    cout << a << setw(20-a.length()) << atype << setw(20) << "converts to" << setw(10)
         << anum << setw(10) << "decimal\n";
                 }

    keep_window_open();
}

最佳答案

看一下 strtol 函数。

char * args[3] = {"0x43", "0123", "65"};
for (int i = 0; i < 3; ++i) {
  long int value = strtol(args[i], NULL, 0);
  printf("%s converts to %d decimal\n", args[i], value);
}

输出:

0x43 converts to 67 decimal
0123 converts to 83 decimal
65 converts to 65 decimal

关于c++ - 如何正确解释数字(十六进制、十进制、十进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195979/

相关文章:

javascript - 从字符串中解析数字

c - 如何克服C语言中SCANF函数的解析错误?

c++ - 我想通过网站展示我的 C++ 项目

c - 将大数字作为字符串进行操作

python - 不会添加计数mastermind游戏python

c# - 四舍五入到 10

C++解析可变长度的 double 行

c++ - 枚举序列化? C++

c++ - 返回一个空字符串 : efficient way in c++

c++ - 您可以在类的初始化列表中使用 Lambda 吗?