我有这个人提到的类似问题
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值
谢谢!
答案 0 :(得分:0)
该语言不会告诉我们char
是带符号的还是未签名的; this depends on your platform。显然,在您(像其他许多人一样)上,它已被签名。
这意味着,假设使用8位字节,则其范围为[-128, 127]
,而不是[0, 255]
。
始终使用unsigned char
处理[0, 255]
范围内的数字。
(我不能建议您对程序进行特定的更改,因为您没有让我们看到它。)