在涉及溢出错误的情况下,从int转换为char
Converting from int to char where overflow errors are concerned
如果可能发生溢出错误,从较大的整型转换为较小的带符号整型不是一个坏主意吗?我对C++Primer(17.5.2)中演示低级IO操作的代码感到惊讶:
int ch;
while((ch = cin.get()) != EOF)
cout.put(ch); //overflow could occur here
考虑到
- cin.get()将获得的字符转换为
unsigned char
,然后转换为int
。因此ch
将在0-255
的范围内(不包括EOF)。一切都很好 - 但随后在
put(ch)
表达式中ch
被转换回char
。如果char
是signed
,那么来自128-255
的ch
的任何值肯定会导致溢出
如果我期望的是普通输入0-127
之外的东西,那么这样的代码通常会是一种糟糕的做法吗?因为无法保证如何处理溢出?
整数降级有一些规则。
当长整数被转换为短整数或短整数被转换成字符时,保留最低有效字节。
如图所示:https://msdn.microsoft.com/en-us/library/0eex498h.aspx
因此,ch
的最低有效字节将被保留。一切都很好。
如果您想将整数转换为以null结尾的字符串来表示它,请使用itoa。
char * itoa ( int value, char * str, int base );
或者您可以将其转换为字符串,然后char:
std::string tostr (int x){
std::stringstream str;
str << x;
return str.str();}
将字符串转换为字符
string fname;
char *lname;
lname = new char[fname.lenght() + 1];
strcpy(f, lname.c_str());
如果您看到"安全错误",请使用#Pragma 禁用它
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度