如何将单个char转换为int

时间:2009-01-13 16:07:36

标签: c++ char

我有一串数字,例如“123456789”,我需要提取它们中的每一个以在计算中使用它们。我当然可以通过索引访问每个char,但是如何将其转换为int?

我已经研究过atoi(),但它需要一个字符串作为参数。因此,我必须将每个char转换为字符串,然后在其上调用atoi。还有更好的方法吗?

11 个答案:

答案 0 :(得分:135)

您可以利用数字的字符编码从48(对于'0')到57(对于'9')的顺序。这适用于ASCII,UTF-x和几乎所有其他编码(请参阅下面的评论以获取有关此的更多信息)。

因此,任何数字的整数值都是数字减去'0'(或48)。

char c = '1';
int i = c - '0'; // i is now equal to 1, not '1'

的同义词
char c = '1';
int i = c - 48; // i is now equal to 1, not '1'

但是我发现第一个c - '0'更具可读性。

答案 1 :(得分:20)

#define toDigit(c) (c-'0')

答案 2 :(得分:8)

或者您可以使用“正确”方法,类似于您原来的atoi方法,但使用std :: stringstream。这应该与字符作为输入和字符串一起使用。 (boost :: lexical_cast是更方便语法的另一种选择)

(atoi是一个旧的C函数,通常建议尽可能使用更灵活和类型安全的C ++等价物.std :: stringstream涵盖与字符串之间的转换)

答案 3 :(得分:4)

您可以使用atoi()函数

// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'

答案 4 :(得分:3)

只要您只想处理阿拉伯数字,并且正在编码中这些数字是连续的,并且与ASCII相同的地方,所提供的答案都很棒。

几乎总是如此。

如果不是,那么你需要一个合适的图书馆来帮助你。

让我们从ICU开始。

  1. 首先将字节字符串转换为unicode字符串。 (留给读者练习。)
  2. 然后使用uchar.h查看每个角色。
  3. 如果我们的字符是UBool u_isdigit (UChar32 c)
  4. 然后值为int32_t u_charDigitValue ( UChar32 c )
  5. 或者也许ICU有一些功能可以帮到你 - 我没有仔细研究过它。

答案 5 :(得分:2)

#include<iostream>
#include<stdlib>
using namespace std;

void main()
{
     char ch;
     int x;
     cin >> ch;
     x = char (ar[1]);
     cout << x;
}

答案 6 :(得分:1)

如果 担心编码,则可以始终使用switch语句。

请注意保留这些大数字的格式。某些系统中整数的最大大小低至65,535(签名为32,767)。其他系统,你有2,147,483,647(或4,294,967,295未签名)

答案 7 :(得分:1)

以下方式出现任何问题?

int CharToInt(const char c)
{
    switch (c)
    {
    case '0':
        return 0;
    case '1':
        return 1;
    case '2':
        return 2;
    case '3':
        return 3;
    case '4':
        return 4;
    case '5':
        return 5;
    case '6':
        return 6;
    case '7':
        return 7;
    case '8':
        return 8;
    case '9':
        return 9;
    default:
        return 0;
    }
}

答案 8 :(得分:1)

通过这种方式,您可以轻松地将char转换为int,将int转换为char:

int charToInt(char c)
{
   int arr[]={0,1,2,3,4,5,6,7,8,9};
   return arr[c-'0'];
}

答案 9 :(得分:0)

对我来说,以下方法效果很好:

QChar c = '5';
int x = c.digitValue();
// x is now 5

文档:int QChar::digitValue() const,其中:

  

返回数字的数字值,如果字符不为-1,则返回-1   一个数字。

答案 10 :(得分:0)

我同意@jalf。使用 sstream 库和 stoi 似乎是推荐的方法:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {

  stringstream st;
  st << 1  << '2';

  cout << stoi(st.str()) + 1; 

  return 0;
}

输出

13

我是 C++ 的新学生,但长期从事 LAMP 堆栈开发。我希望字符串类有更多的东西可以在字符和字符串之间平滑转换,但我还没有找到原生支持的东西。