各位大神好:
我有一个二进制文件,使用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”这个字符就是会被自动删除。
为什么会这样子呢?望各位高手指教指教,或者有没有更好的方法可以读取二进制文件,多谢!
(这里的字体设置和排版,我还真不知道怎么弄,不好意思!)