• 4042阅读
  • 1回复

[提问]QDataStream读取二进制文件,特殊字符被丢弃 [复制链接]

上一主题 下一主题
离线fans_run
 
只看楼主 倒序阅读 楼主  发表于: 2013-07-28
各位大神好:
   我有一个二进制文件,使用Ultral Edit-32 (这个软件可以把二进制文件转换成unicode编码)打开这个文件,
头20个字符是"47 7F 41 1D 00 B2 F4 E2 00 10 C3 0D 0D 00 0D 5E 2D FE F5 EF"。
   现在我想用QDataStream读取这个二进制文件,最终也是想转换为unicode格式的字符。
   以下是我的代码:

第一种方法,将数据读到char数据数组中:

   QFile file(fileName);
    char pfile[100];
    int i = 0;

    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        QMessageBox::warning(this,tr("读取文件"),tr("无法读取文件 %1:\n%2.").arg(fileName).arg(file.errorString()));
        return false;
    }

    QDataStream in(&file);
    in.setVersion(QDataStream::Qt_4_7);
    in.readRawData(pfile,100);
    while(i<16)
    {
        qDebug("ch %x ",pfile);
        i++;
    }

第一种方法打印出来的结果是:47 7F 41 1D 00 B2 F4 E2 00 10 C3  00  5E 2D FE F5 EF

第二种方法:将数据读到int变量中

    QFile file(fileName);
    int magic;
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        QMessageBox::warning(this,tr("读取文件"),tr("无法读取文件 %1:\n%2.").arg(fileName).arg(file.errorString()));
        return false;
    }
    QDataStream in(&file);
    in.setVersion(QDataStream::Qt_4_7);
    in.setByteOrder(in.LittleEndian);
    in >> magic >> magic >> magic >> magic;
    qDebug("ch =0x%x,0x%x,0x%x,0x%x",(magic>>24)&0x000000ff,(magic>>16)&0x000000ff,(magic>>8)&0x000000ff,(magic>>0)&0x000000ff);

第二种方法打印出来的结果是:  10 C3  00 5E (OD被删除,后面的自动往前补)
    
    问题:当读到“OD”(换行格字符),这个字符就被自动跳过了。我使用了其他方法也一样,“OD”这个字符就是会被自动删除。
          为什么会这样子呢?望各位高手指教指教,或者有没有更好的方法可以读取二进制文件,多谢!
          (这里的字体设置和排版,我还真不知道怎么弄,不好意思!)
离线dbzhang800

只看该作者 1楼 发表于: 2013-07-29
把 QFile::Text 去掉!
快速回复
限100 字节
 
上一个 下一个