一、二者区别

  (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”。