| 之前都没出过问题,就在现在的这个硬件上,用这个代码输出的数据出了乱码,想不通为什么,求大神指教。   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);
    }
} | |