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

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

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

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

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

输出是 51。

请帮忙谢谢:)

【问题讨论】:

  • atoi 有什么问题?
  • 它适用于第一种情况,因为您要从 x 中减去 '0' 的 ascii 代码。它不适用于较大的数字,因为您不能从字符串中减去 ascii 代码。
  • @Calips:不一定是 ascii,任何支持的编码都可以。
  • 您注意到13 是两个字符吗?一个char 包含一个字符;一个字符不能是两个字符。

标签: c++ string int


【解决方案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'

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多