У меня проблема с преобразованием высокого значения ASCII int в char, char получает отрицательное значение (я просто хочу знать, как его решить) - PullRequest
0 голосов
/ 21 января 2019

У меня похожая проблема, о которой упоминал этот парень

C ++: получение случайных отрицательных значений при преобразовании char в 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 голосов
/ 22 января 2019

Язык не сообщает нам, является ли char подписанным или неподписанным; это зависит от вашей платформы .По-видимому, у вас (как и у многих других) он подписан .

Это означает, что при условии 8-битных байтов его диапазон равен [-128, 127], а не [0, 255].

Используйте unsigned char для обозначения чисел в диапазоне [0, 255].

(я не могу предложить конкретные изменения в вашей программе, потому что вы не дали нам увидетьона.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...