无符号字符的标准输入

时间:2014-08-01 19:40:50

标签: c++ stdin unsigned-char

我正在尝试通过程序发送无符号字符,我希望能够通过标准输入(即std :: cin)获取数字。例如,当我输入2时,我希望它发送☻(unsigned char 2)。当我使用代码时:

 std::cout << "Enter values: ";
            {
                unsigned char d;
                unsigned char e = 2;
                std::cin >> d;
                WriteFile(file, &d, 1, &written, NULL);
                std::cout << "d= " << d << "\n"; 
                std::cout << "e= " << e;
            }

我得到了

 Enter values: 2
 d=2
 e=☻

有人可以告诉我为什么d被正确解释为unsigned char 50而e被正确解释为unsigned char 2?

当然,在您的解释之后,您可以解释如何获取用户输入并进行转换,以便我发送2而不是&#39; 2&#39;。

2 个答案:

答案 0 :(得分:3)

由于std::cin >> d;默认情况下会读取char类型,因此输入2会转换为字符2(使用ASCII代码50),而不会转换为ASCII码2.这是一种正常行为,否则尝试从cin读取数字将最终成为一团糟。

另一方面,在unsigned char e = 2;中,您明确地为变量赋值(2),因此编译器会盲目地将其赋值给e

你可能想要这个:

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    string myString;
    cin >> myString;
    char c = atoi(myString.c_str());
    cout << c << endl;
}

答案 1 :(得分:0)

当您通过2输入std::cin时,它被正确解释为字符文字'2'

你应该替换

unsigned char e = 2;

unsigned char e = '2';