• 7081阅读
  • 8回复

请教个QString存到char数组中并存到文件中的问题 [复制链接]

上一主题 下一主题
离线tangxunmin
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-07
struct dataAccess{
    qint8    position;
    char     portname[20];
    char     portaddr[10];
    quint8   portwidth;
    char     portdiscription[1024];
    bool     validate;
    
};

    struct dataAccess datatolist;
    strset((char*)&datatolist,0);
    datatolist.position = currentrow;
    qstrncpy(datatolist.portname,(char*)&str0,sizeof(str0));//此处将字符窜拷贝到字符数组中
    qstrncpy(datatolist.portaddr,(char*)&str1,sizeof(str1));
    datatolist.portwidth = indexByte;
    qstrncpy(datatolist.portdiscription,(char*)&str2,sizeof(str2));
    datatolist.validate = true;

    outStream.writeRawData((const char*)&datatolist, sizeof(dataAccess));写入文件
读取文件的时候
    instream.readRawData((char*)&dataread,sizeof(dataAccess));
显示的时候
    item0->setText(dataread.portname);
                     item1->setText(dataread.portaddr);
显示就是乱码了
这是为什么   是字符串存到结构中的字符数组的时候出错了吗
离线dbzhang800

只看该作者 1楼 发表于: 2010-01-07
楼主这问题,看得能让人疯掉。
我猜一下吧,大概楼主是不清楚 QString 和 char* 如何互相转换。
离线tangxunmin

只看该作者 2楼 发表于: 2010-01-07
哈哈 是将String存到结构中  再将结构存到文件中  单独出来显示就乱码了 不知道是不是string存到char中有什么特别的注意
离线dbzhang800

只看该作者 3楼 发表于: 2010-01-07
问题是单纯从的正文看,QString 的影子都没看到了。

如果你里面的 str0 的是 QString的对象的话,那么我上面的猜想是对的。
离线tangxunmin

只看该作者 4楼 发表于: 2010-01-08
是的 str0 1都是qstring的对象
离线dbzhang800

只看该作者 5楼 发表于: 2010-01-08
引用第4楼tangxunmin于2010-01-08 08:00发表的  :
是的 str0 1都是qstring的对象


QString 采用的是unicode,和char * 之间的转换属于 decode 很 encode 的问题。

char * 中采用编码格式,这个是决定性问题。

如果你的 QString 是 ASCII 字符,几乎没什么考虑的
转成 char *
QByteArray QString::toAscii () const
QByteArray QString::toLatin1 () const

从char* 转回来, fromAscii 或 fromLatin1

如果是其他字符,比如简体中文,那么就选择 gbk 或 utf8
toUtf8 () , fromUtf8()
离线tangxunmin

只看该作者 6楼 发表于: 2010-01-08
明白 thanks!
离线2nd090215
只看该作者 7楼 发表于: 2010-01-10
关注,
离线kingsmail
只看该作者 8楼 发表于: 2012-03-28
字符问题好恼火
快速回复
限100 字节
 
上一个 下一个