将字符显示为没有显式强制转换的整数
Displaying chars as ints without explicit cast
每次我向 cout 对象发送字符时,它都会以 ASCII 字符显示,除非我将其转换为 int。
问:有没有办法在没有显式强制转换的情况下显示字符的数值?
我在某处读到,在您的代码中进行过多的转换可能会导致(您的程序)完整性的丧失。我猜测字符出于特定原因以 ASCII 显示,但我不确定为什么。
我本质上是在创造一款游戏。我正在使用计划向控制台显示的小数字(无符号字符)。我可能是偏执狂,但每当我在代码中到处发送垃圾邮件static_cast<int>
时,我都会感到不安。
不过,类型转换没有错,特别是如果你使用static_cast
来做到这一点。 这就是你应该使用的。 它允许编译器验证类型转换并确保它是安全的。
要更改 <<
运算符的行为,您必须覆盖char
值的默认<<
运算符,例如:
std::ostream& operator <<(std::ostream &os, char c)
{
os << static_cast<int>(c);
return os;
}
char c = ...;
std::cout << c;
您可以创建一个将char
作为输入的自定义类型,然后实现该类型的<<
运算符,例如:
struct CharToInt
{
int val;
CharToInt(char c) : val(static_cast<int>(c)) {}
};
std::ostream& operator <<(std::ostream &os, const CharToInt &c)
{
os << c.val;
return os;
}
char c = ...;
std::cout << CharToInt(c);
您可以创建一个执行类似操作的函数,然后不必覆盖<<
运算符,例如:
int CharToInt(char c)
{
return c;
}
char c = ...;
std::cout << CharToInt(c);
随着事情的发展,这是对强制转换的合理使用,但是是的,它可以改进。 所涉及的"完整性损失"只是,如果其中一个数据类型从 char 更改为双精度,则强制转换将继续编译,但可能不会执行您想要的操作。 您可以改为创建帮助程序函数:
inline int to_int(char c) { return static_cast<int>(c); }
与static_cast不同,这只会在原始类型char
时启动,因此,如果您更改为类似double
的内容,您将收到编译器警告 - 实际上是提醒您检查代码。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在C++中将整数转换为其数字数组
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 如何将整数字符串转换为整数的二维向量?
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- 如何防止双精度值到整数的隐式转换
- 为什么此指针值不能转换为整数的规则是什么?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 无法将"整数 (*)[m]"转换为"整数 (*)[100000]
- 静态强制转换允许转换对象指针,但不允许转换整数