[英]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.