为unsigned char分配整数值

时间:2017-08-22 18:22:42

标签: c++ ascii

试图理解,但我无法得到完美的答案。

#include<iostream>
using namespace std;

int main(){

    unsigned char ch = '150';
    int count=0;//just to get a count for the loop
    cout << (int)ch<<endl;
    for (int i = 0; i <= ch * 2; i++){
        cout << "Hello" << endl;
        count++;
    }
    cout << count;

    return 0;
}

当我分配时:

unsigned char ch = '250';

如果是打印相同的输出。我从输出中理解的是,它取数字的最后一个索引,即0,并且从ASCII查找表中给出了整数值为48的

unsigned char ch = '186';

给我整数值为54,(这是数字6的ASCII值)

unsigned char ch = '154';

给我整数值为52,(这是数字2的ASCII值)

我的理解是否正确?并且这是否适用于单引号中分配给unsigned char的任何数字?I have attached the screenshot of the Ascii look up table

我没有收到任何错误或警告。No error in the compiler

3 个答案:

答案 0 :(得分:1)

不,因为你已经将值包装在单引号附近它变成了多字符常量,它的值是实现定义,所以它与之无关任何一个字符的索引,因为没有涉及字符。

如果您想要值150,那么

unsigned char c = 150;

就是这样。

你拥有它的方式,它的类型确实是int,严格来说你不能在unsigned char中存储这样的值,因此编译器可能会发出警告,而另一个则为< em>多字符常量为非便携式

一般情况下,不要忽略警告,除非你知道编译器会事先警告它,并且在这种情况下帮助编译器通过采取适当的操作来忽略这种警告,这取决于情况。

答案 1 :(得分:1)

有一些方法可以声明unsigned char字符文字:

unsigned char ch1 = 150;
unsigned char ch2 = 0x96;
unsigned char ch3 = '\150';
unsigned char ch4 = '\x96';
unsigned char ch5 = '\0226';
unsigned char ch6 = 0226;
unsigned char ch7 = 0b10010110;

选择应用程序中最具可读性的那个

如果你施放到int你的var打印为数字,而不是字符。 如果你想要角色,不要施放

cout << ch << endl;

答案 2 :(得分:0)

之间存在很大差异:

unsigned char ch = '150'; // wrong way
unsigned char ch = 150;   // correct way (conversion from integer to char according to ASCII standard)

正如你可以看到我的第一行,只要ch是char类型,你给它分配一个字符串(多字符常量)。这里不会发生从ASCII到int或相反的转换,但面对来自编译器的警告:

warning C4309: 'initializing' : truncation of constant value

正确的方法是只为一个字符变量分配一个字符:

unsigned char ch = '1'; // or any other character.

在第二个声明中:

unsigned char ch = 150;

150以上是整数值而不是字符串,因此编译器会根据ASCII表û将其转换为字符。

另一个例子:

char ch = 65; // which is capital a `A` in ASCII.
std::cout << ch << std::endl; // A