C ++中的Char-to-int转换

时间:2015-04-28 22:45:24

标签: c++

在Stroustrup编程的第3.9.1节“安全转换”中,他有代码来说明从int到char的安全转换。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;

int main()
{

    char c='x';
    int i1=c;
    int i2='x';

    char c2 = i1;

    cout << c <<'<< i1 << ' << c2 << '\n';

    return 0;
}

应该将x 120 x打印到屏幕上。

然而,我无法让它工作,我不知道为什么。我得到的结果是x1764834364x

我也收到3个警告(在Xcode 6.3.1中)。

  • 多字符字符常量。
  • 其类型的字符常量太长。
  • 未使用的变量i2。

是什么导致这种情况?

2 个答案:

答案 0 :(得分:3)

我想添加一些可能对类似情况的人有用的相关信息:

当您使用单引号打印比字符更长的内容时,您会得到如此奇怪的输出。例如:

cout << 'a'<<'    '<<'a'; // output will be something like: a538946288a

另一方面单引号单引号:

cout << 'a'<<' '<<'a'; // output will be: a a

如果您想提供多个空格字符,可以使用双引号。

在您的代码中:

int main()
{

    char c='x'; // c is character 'x'
    int i1=c;   // i1 is its integer value
    int i2='x'; // i2 has the integer value but it`s never used

    char c2 = i1; // c2 is the character 'x'

    cout << c <<" "<< i1 <<" "<<c2 << '\n';  // should print: x 120 x 
    // By using double quotes you may enter longer spaces between them 
    // vs. single quotes puts only a single space.
    return 0;
}

答案 1 :(得分:3)

问题在于:

'<< i1 << '

编译器会给你一个警告(至少是gcc):

  

警告:字符常量对于其类型

太长

它认为您正在尝试显示单个char(撇号之间的内容),但实际上您正在传递多个char。您可能只想添加空格,例如

' ' << i1 << ' '