之前都没出过问题,就在现在的这个硬件上,用这个代码输出的数据出了乱码,想不通为什么,求大神指教。 string MeasData::ToString() const { stringstream strStream; strStream.setf(ios::fixed); strStream.precision(5); strStream<<date.ToString()<<"\t"<<time.ToString() <<"\t"<<nPeriod<<"\t"<<strPointName<<"\t"<<nState<<"\t"<<nReMeas <<"\t"<<hvd.hang.get_dms_str()<<","<<hvd.vang.get_dms_str()<<","<<hvd.dSlantDist <<"\t"<<xtilt.get_dms_str()<<","<<ytilt.get_dms_str() <<","<<strFailType; return strStream.str(); } 用这个函数输出的三条数据 FILE 第三条数据的一个数值中间多了一串乱码,这个问题它也不是一直出,不知道咋回事。 |
|
60分 |
最可能是你输入的时候就已经有问题了。<<hvd.vang.get_dms_str()<<“,”<<hvd.dSlantDist你输入前打印看看这两个值是不是有问题了。
|
40分 |
先查看打印前变量是不是已经有问题了
|
好的,我试试 |
|
多谢楼上两位大神,自己都不太相信会从串口读个错的数据出来,结果保存串口数据的代码写错了。。
|
|
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
void HexDump(char *buf,int len,int addr) { int i,j,k; char binstr[80]; for (i=0;i<len;i++) { if (0==(i%16)) { sprintf(binstr,"%08x -",i+addr); sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } else if (15==(i%16)) { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); sprintf(binstr,"%s ",binstr); for (j=i-15;j<=i;j++) { sprintf(binstr,"%s%c",binstr,(""!""<buf[j]&&buf[j]<=""~"")?buf[j]:"".""); } printf("%s\n",binstr); } else { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } } if (0!=(i%16)) { k=16-(i%16); for (j=0;j<k;j++) { sprintf(binstr,"%s ",binstr); } sprintf(binstr,"%s ",binstr); k=16-k; for (j=i-k;j<i;j++) { sprintf(binstr,"%s%c",binstr,(""!""<buf[j]&&buf[j]<=""~"")?buf[j]:"".""); } printf("%s\n",binstr); } } |