我从事涉及编写二进制数据的项目,我使用QString存储行,然后通过Qfile将其保存在硬盘上
data.append(QChar(10));
我将编码设置为“ISO-8859-1”,无论如何当数据等于10 I如上所示时,保存的数据是0x0d,0x0a我发现问题源,10 ='\ n'和Qt改变它''\ n \ r'所以它发生了。
我该如何解决?
答案 0 :(得分:1)
您的问题和答案很差,原因有几个。以下是我立即发现的问题:
data
对象的类型,这意味着我们确实知道data.append(...)
正在做什么。确保您的帖子包含short, self contained, correct (compilable), example。此外,在您发布的答案中,没有提及此data
对象。byte
?它不是C ++或Qt的一部分,而且这是你给我们继续的唯一两个标签。答案 1 :(得分:0)
我找到了原因,因为我创建的QFile对象是在文本模式下,所以当QFile想要写文件时它会更改/ n到/ r / n下面的代码是前面的代码,因为有二进制问题存在QIODevice::Text
QFile myfile;
myfile.setFileName("build/Data.bin");
if(!myfile.open(QIODevice::WriteOnly|QIODevice::Text))
return;
对于二进制模式,我们可以省略QIODevice::Text
,因此第二行更改为
if(!myfile.open(QIODevice::WriteOnly))
起初我认为这是Qt的错误,并尝试使用ofstream来编写文件,同样的事情发生在ofstream上,最后用ofstream编写二进制代码如下所示
这一点是std::ios_base::binary
ofstream file;
file.open ("example.txt", std::ios_base::out | std::ios_base::binary);
file << (byte)10;
file.close();