繁体   English   中英

如何在C ++中将char正确转换为int?

[英]How to properly convert char to int in c++?

在将char转换为c ++的int时,遇到了一个我以前从未遇到过的独特问题。

我正在遍历一串称为total_line的整数,其内容为:

1526

我正在尝试将所有其他字符转换为int,这是我的代码:

cout << total_line[i+1] <<endl;
int d = total_line[i+1] <<endl;
cout << d << endl;
i++;

我的输出奇怪的是:

5
53
6
54

我不确定为什么将5转换为int 53而将6转换为int 54。

就像其他人提到的那样,字符实际上表示为映射到字符表的数字。 数字到字符的映射取决于所选的字符集而有所不同, 例如 ,对于US-ASCII,字符'1''2'对应于数字49和50( 有关完整的US-ASCII表,请参见此处 )。

要将数字的字符串表示形式转换为带符号的整数,请使用std::stoi (自C ++ 11起)。

以下代码片段将字符串切成单独的数字,并使用std::stoi分别将其转换为数字。

for (std::string::size_type i = 0, n = total_line.size(); i != n; ++i) {
    int d = std::stoi(total_line.substr(i, 1));

    std::cout << d << std::endl;
}

使用标准库函数std::stoi的优点是无论字符编码如何均可工作。

只需查看ascii表 (Linux上的man ascii)

     Oct   Dec   Hex   Char
     ---------------------
     060   48    30    0
     061   49    31    1
     062   50    32    2
     063   51    33    3
     064   52    34    4
  -> 065  |53|   35   |5|
  -> 066  |54|   36   |6|
     067   55    37    7 
     070   56    38    8 
     071   57    39    9  

因此,您可以看到将5转换为53并将6转换为54的原因是因为char'5 '的十进制值不是5而是53(与6相同)。

如果要将char转换为int,请尝试以下操作:

int d = total_line[i] - '0';

我不推荐你这个:

int d = total_line[i] - 48;

由于可移植性 (感谢Pete Becker),并不是所有人都知道'0'的十进制值并直接使用'0'更容易理解。

这行看起来很奇怪:

int d = total_line[i+1] <<endl;

operator<<endl在那做什么?

为什么不简单地这样做呢?

int d = total_line[i+1];

您需要从位置i而不是i+1进行读取,并且第二行中还有一个额外的endl 您获得的值是您尝试读取的字符的ASCII值。 为了将它们转换为int您需要从中减去ASCII值“ 0”。 而且,如果您在for循环中操作,则无需显式增加i 这也许就是您跳过字符的原因

这可能会有所帮助:

cout << total_line[i] <<endl;
int d = total_line[i];
cout << d - '0' << endl;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM