这是我的代码,它以数字作为输入并显示输出的字符
#include <iostream>
#include <stdio.h>
using namespace std;
int A[1000];
int main()
{
int ln=0,min = 99999999;
while(!cin.eof())
{
A[ln]=0;
for(int i=0;i<3;++i)
{
int x;
cin>>x;
A[ln]+=x;
}
if(A[ln]<=min)
min = A[ln];
++ln;
}
char buffer[2049];
for(int j=0;j<ln-1;++j)
{
int x = A[j] - 250;
cout<<x<<endl;
if(x<32)
cout<<x<<" here goes non-printable ascii"<<endl;
if(x>127)
cout<<x<<"here goes non-printable ascii"<<endl;
buffer[j] = x;
}
buffer[ln-1] = 0;
printf("%s\n",buffer);
}
现在可打印的Ascii值在32到127之间。但是,当我给程序输入
296 294 255 268 313 278 311 270 290 305 322 252 276 286 301 305 264 301 251 269 274 311
时,我得到以下输出,595
595here goes non-printable ascii
609
609here goes non-printable ascii
621
621here goes non-printable ascii
629
629here goes non-printable ascii
613
613here goes non-printable ascii
620
620here goes non-printable ascii
544
544here goes non-printable ascii
Samuel
但是最后它是打印“ Samuel”的,那是什么问题呢?
最佳答案
因为当您进行字符转换时,仅存储最低有效字节,而595
的最低有效字节是1010011
,即ASCII 83
。
关于c++ - 为什么要打印超出ASCII范围的数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20345817/