一、二者区别
(1)QTextStream 类:用于对数据进行文本格式的读/写操作,可在 QString、QIODevice或 QByteArray 上运行,比如把数据输出到 QString、QIODevice 或 QByteArray 对象上,或进行相反的操作。
(2)QDataStream 类:用于对数据进行二进制格式的读/写操作,QDataStream 只可在QIODevice 或 QByteArray 上运行,因为 QString 只存放字符数据
二、QDataStream使用过程问题
写bin文件时不能使用QIODevice::Text,会导致在每个0x0A前面添加一个0x0D。
三、QDataStream 类
(1)字节序大小端
1 //大端格式,高字节在前 2 QDataStream out(&outData,QIODevice::ReadWrite); 3 out.setByteOrder(QDataStream::BigEndian); 4 5 6 //小端格式,低字节在前 7 QDataStream out(&outData,QIODevice::ReadWrite); 8 out.setByteOrder(QDataStream::LittleEndian);
四、LF与CRLF
(1)将Unix的换行符(LF)转换成Windows的换行符(CRLF)可以使用以下命令
sed 's/$/\r/' unixfile.txt > windowsfile.txt
(2)QTextStream写入数据到文件
1 QTextStream out(&file); 2 out << "Line 1" << endl; // 换行 3 out << "Line 2" << Qt::endl; // 换行 4 out << "Line 3\n"; // 换行
(3)QFile打开的时候要指定QIODevice::Text,否则 \n和endl 会被解析成不同的内容,特别是windows下,因为windows下换行必须是 CR+LF。
比如file.open(QIODevice::Write),之后不管是用QTextStream还是别的,windows下直接写入“\n”或者用stream的endl,换行都是 LF
如果是file.open(QIODevice::Write | QIODevice::Text),换行就是成了CR+LF。
(4)不同系统之间的区别:
Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即"\r"。
注意点:在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。