【发布时间】:2015-09-06 04:16:36
【问题描述】:
在 C++ 中将 char 转换为 int 的原因有哪些?
【问题讨论】:
-
要找出它的 ASCII 值,对字符串进行修改,为加密目的加扰字符串,等等。
-
@NoobCoder:这些都不需要从
char转换为int。
在 C++ 中将 char 转换为 int 的原因有哪些?
【问题讨论】:
char 转换为int。
将char 值强制转换为int 几乎没有意义。
首先,一些术语。 cast 是一种显式转换,通过转换运算符指定,可以是 C 样式的 (type)expr 或 C++ 转换之一,例如 static_cast<type>(expr)。 隐式 转换不是强制转换。您有时会看到短语“隐式强制转换”,但在 C++(或 C)中没有这样的东西。
如果它们的操作数是比int 或unsigned int 窄的整数类型,则大多数算术运算符都会提升它们的操作数。例如,在表达式'0' + 1中,将0的char值在相加前提升为int,结果为int类型。
如果您想将char 值分配给int 对象,只需分配它即可。该值是隐式转换的,就像使用强制转换一样。
在大多数情况下,隐式转换比强制转换更受欢迎,部分原因是它们不易出错。由语言规则指定的隐式转换通常会做正确的事情。
在某些情况下,您确实需要将 char 转换为 int。这是一个:
char c = 'A';
std::cout << "c = '" << c << "' = " << static_cast<int>(c) << "\n";
重载的<< 运算符接受char 或int(以及许多其他类型),因此没有隐式转换。如果没有演员表,相同的char 值将被使用两次。输出(假设是基于 ASCII 的字符集)是:
c = 'A' = 65
这是一个不寻常的情况,因为<< 运算符对char 和int 类型的处理非常不同。在大多数情况下,由于 char 已经是整数类型,所以使用 char 或 int 值并不重要。
我能想到另一种非常模糊的可能性。 char 值几乎总是提升为 int。但是对于纯 char 未签名 并且 char 和 int 的宽度相同的实现,纯 char 被提升为 unsigned int。这只有在CHAR_BIT >= 16 和sizeof (int) == 1 时才会发生。您不太可能遇到这样的实现。即使在这样的系统上,char 是否提升为 int 或 unsigned int 通常也无关紧要,因为任一提升都会产生正确的数值。
【讨论】:
一般来说,这应该很少发生,因为何时使用 char 以及何时使用 int 相当明确。
但是,如果您有兴趣对一组字符执行算术运算,则需要更多内存来存储整体值,因此您通常可以使用 int(或任何其他数据类型)来存储整体值.
通过这样做,您更有可能将字符隐式转换为所选数据类型。
但是,您也可以在计算之前或期间显式转换这些字符(不过后来的 C++ 版本会为您处理这些问题)。
这是字符转换的一种更常见的用法。
但在实践中,这通常可以避免,因为从长远来看,它会产生更清晰的代码
【讨论】:
char my_letter) 在 alpabet 中位置的快速方法是 int(my_letter) - int('a') + 1(如果是小写字母)和 int(my_letter) - int('A')(如果是大写字母)。