大于 9 的数字的 C++ char 到 int 转换

Posted

技术标签:

【中文标题】大于 9 的数字的 C++ char 到 int 转换【英文标题】:C++ char to int conversion for numbers greater than 9 【发布时间】:2019-12-16 12:34:48 【问题描述】:

我正在尝试将 char 数值转换为 c++ 中的整数。 例如:

char x ='0';
int intX = x-'0';

这行得通,但是当我尝试对大于 10 的数字做同样的事情时,它会吓坏了。 例如:

char onuc = '13';
cout<<int(onuc);

输出是 51。

请帮忙谢谢:)

【问题讨论】:

使用std::stoi。参考:en.cppreference.com/w/cpp/string/basic_string/stol. atoi 有什么问题? 它适用于第一种情况,因为您要从 x 中减去 '0' 的 ascii 代码。它不适用于较大的数字,因为您不能从字符串中减去 ascii 代码。 @Calips:不一定是 ascii,任何支持的编码都可以。 您注意到13 是两个字符吗?一个char 包含一个字符;一个字符不能是两个字符。 【参考方案1】:

x - '0' 成语仅适用于字符 0 到 9 排列在一个连续的块中。 (C++ 标准要求这样做)。

'13' 是一个具有实现定义值的多字符常量。它是一个int 类型,因此您对char 的分配通常是一种有损转换。 '1' * 256 + '3' 是一个常见的实现。

所以可惜这种方法不起作用,比如

int intX = std::stoi("13");

但是会的。

【讨论】:

谢谢大家 :) 是的,你是对的,我的工作做得很好【参考方案2】:

在第二种情况下,您实际上正在做的是将多字符转换为 int 类型。多字符的实现方式与普通字符不同,普通字符只不过是 ascii 代码。 多字符'13' 的值将导出为'1'*256+'3',即12592(我相信它取决于编译器)。

对于更多示例,int('abcd') = 1633837924 计算为:

'a'*2563 + 'b'*2562 + 'c'*256 + 'd'

希望这个回答对你有帮助。

【讨论】:

以上是关于大于 9 的数字的 C++ char 到 int 转换的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 串行返回奇怪的数字 + 无法将 char 数组转换为 int C++

c++ 如何把一个int转为char*

怎么把int转换为char类型

C++中如何将int或者char转化为string类

char转int,int转char

将字符串转换为 int 和 char