大于 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 转换的主要内容,如果未能解决你的问题,请参考以下文章