【发布时间】:2015-11-08 19:49:50
【问题描述】:
我有一些 Delphi 代码需要转换为 Qt/C++。
整个代码读取一个二进制数据文件,并提取部分数据。
Delphi代码读取文件内容如下:
var
m1 tmemorystream;
h1 integer;
.
.
m1 := tmemorystream.Create;
m1.LoadFromFile(paramstr[1]);
m1.Read (h1, 2);
现在,如果文件中的前 2 个字节是“01 00”,我希望 h1 是 0x0100,但它似乎是“向后”读取的,所以 h1 中的值实际上是“00 01”,即0x1。
Qt中的等价文件我要读取:
QFile fileIn(iFile);
if (!fileIn.open(QIODevice::ReadOnly)) return;
QByteArray m1 = fileIn.readAll();
如何像在 Delphi 代码中一样将前 2 个字节读入 h1? Delphi 似乎有一种方法可以指定从流/字节数组中读取的字节数为整数表示,但这似乎是相反的。
我能想到的在 Qt 中实现相同结果的等价物是:
QString tStg;
tStg.sprintf ( "0x%02x%02x", getUChar ( m1, 1), getUChar ( m1, 0) );
bool ok;
unsigned long h1;
h1 = tStg.toLong(&ok,16);
似乎啰嗦和不雅......当然我是 C++ 的新手。
所以我的问题首先是在 Qt 中是否有直接相当于 Delphi 的 tmemeorystream.Read 的方法?
有没有更好的方法可以像 Delphi 代码(变量 h1)那样将一系列字节提取到一个长整型/整数中?
【问题讨论】: