使用 Qt 读取无符号字符
Posted
技术标签:
【中文标题】使用 Qt 读取无符号字符【英文标题】:Reading unsingned chars with Qt 【发布时间】:2012-12-17 00:31:47 【问题描述】:大家好,堆栈溢出者,
我目前正在解析一个同时包含文本和二进制数据的文件。目前,我正在通过以下方式读取文件:
QTextStream in(&file);
int index = 0;
while(!in.atEnd())
if (index==0)
QString line = in.readLine(); // parse file here
else
QByteArray raw_data(in.readAll().toAscii());
data = new QByteArray(raw_data);
index++;
其中 data 指的是我正在寻找的二进制数据。我不确定这是否是我想要的,因为 QString 被编码为 ascii,我不知道是否丢失了一些字节。
我查看了文档,它建议使用 QDataStream。如何将这两种方法结合起来,即在换行后读取带有编码的行并读取二进制转储?
非常感谢您的帮助!
【问题讨论】:
【参考方案1】:这会做你想做的。
QTextStream t(&in);
QString line;
QByteArray raw_data;
if(!in.atEnd()) line = t.readLine();
in.reset();
int lineSize = line.toLocal8Bit().size() + 1;
in.seek(lineSize);
if(!in.atEnd())
int len = in.size() - lineSize;
QDataStream d(&in);
char *raw = new char[len]();
d.readRawData(raw, len);
raw_data = QByteArray(raw, len);
delete raw;
PS:如果文件格式是你的,最好用QDataStream创建文件,用<<
写数据,用>>
读数据。这样您就可以将QByteArray
和QString
存储在文件中而不会出现此类问题。
【讨论】:
以上代码包含错误:调用 in.size() 是不可能的,因为 QTextStream 不提供上述方法。还有转换: QDataStream d(&in);也会导致错误。in
不是QTextStream
,in
是QFile
。 QTextStream t
(在我的代码示例中)
好的,谢谢!假设你使用了我的变量名。它现在似乎起作用了。谢谢!
您知道在 QByteArray 中保存无符号字符与保存字符是否有区别吗?
为什么要重置?附加 QDataStream 应该从 QTextStream 停止的地方开始。以上是关于使用 Qt 读取无符号字符的主要内容,如果未能解决你的问题,请参考以下文章
C++ 使用 istringstream 将整数读取为无符号字符