无符号字符的标准输入

Standard Input for Unsigned Character

本文关键字:标准输入 字符 无符号      更新时间:2023-10-16

我试图通过程序发送无符号字符,我希望能够通过标准输入(即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被错误地解释为无符号字符50,而e被正确地解释为无符号字符2?

当然,在你的解释之后,你可以解释如何获取用户输入并将其转换为我发送2而不是'2'。

由于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;
}

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

你应该替换

unsigned char e = 2;

unsigned char e = '2';