我在将高ASCII值int转换为char时遇到问题,char获得一个负值(我只想知道如何解决)

时间:2019-01-21 17:47:58

标签: c++ visual-studio-2017 type-conversion

我有这个人提到的类似问题

C++: Getting random negative values when converting char to int

但是我只想知道如何解决该问题,因此代码不应变得更慢。我欢迎所有建议。

我试图将char设置为unsigned char,但是那没有用,然后我尝试使用此代码:

const char char_max = (char)(((unsigned char) char(-1)) / 2);

c = (num & char_max);

但是输出是不同的,我不知道代码到底是做什么的。

我还是学生。

cout << "\nEnter any string : ";
    cin >> s1;

    for (char& c : s1)
    {
    num = c;
    num= (num+rand())%256;
            // const char char_max = (char)(((unsigned char) char(-1)) / 2);
            //c = (num & char_max)
    c = num;
    }
    cout <<"\n"<< s1;

我希望c具有正常的ASCII值,以便我可以将其重新用于检索原始的int值

谢谢!

1 个答案:

答案 0 :(得分:0)

该语言不会告诉我们char是带符号的还是未签名的; this depends on your platform。显然,在您(像其他许多人一样)上,它已被签名

这意味着,假设使用8位字节,则其范围为[-128, 127],而不是[0, 255]

始终使用unsigned char处理[0, 255]范围内的数字。

(我不能建议您对程序进行特定的更改,因为您没有让我们看到它。)