Code Bye

用stringstream转换数据的问题

之前都没出过问题,就在现在的这个硬件上,用这个代码输出的数据出了乱码,想不通为什么,求大神指教。

  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
MEASFILE_2015-05-28_11:21:48
2015-05-28 11:21:21 12 5 1 0 228.36235,70.32150,2.73410 -0.00525,-0.0026,
2015-05-28 11:21:35 12 5 1 1 228.36235,70.32140,2.73410 -0.00290,-0.0026,
2015-05-28 11:21:48 12 5 1 2 228.36230,70??m`=?p €@x €@T €@T?.32160,2.73410 -0.00350,-0.0026,

FILE

第三条数据的一个数值中间多了一串乱码,这个问题它也不是一直出,不知道咋回事。

60分
最可能是你输入的时候就已经有问题了。<<hvd.vang.get_dms_str()<<“,”<<hvd.dSlantDist你输入前打印看看这两个值是不是有问题了。
40分
先查看打印前变量是不是已经有问题了
引用 1 楼 pengzhixi 的回复:

最可能是你输入的时候就已经有问题了。<<hvd.vang.get_dms_str()<<“,”<<hvd.dSlantDist你输入前打印看看这两个值是不是有问题了。

好的,我试试

多谢楼上两位大神,自己都不太相信会从串口读个错的数据出来,结果保存串口数据的代码写错了。。
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 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);
    }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用stringstream转换数据的问题