If your reading machine is little-endian (most are) then the problem should be trivial:
const int vectSize = 531;
const int blockSize = vectSize * sizeof(float);
QVector<float> vect(vectSize, 0.0f);
int desiredBlock = 0; // zero based, e.g 0..49999
if (file.seek(desiredBlock * blockSize)) {
qint64 bytes = file.read(reinterpret_cast<char*>(vect.data()), blockSize);
if (bytes != blockSize)
qFatal("Oops!");
qDebug() << vect;
}
}
const int vectSize = 531;
const int blockSize = vectSize * sizeof(float);
QVector<float> vect(vectSize, 0.0f);
int desiredBlock = 0; // zero based, e.g 0..49999
QFile file("data");
if (file.open(QIODevice::ReadOnly)) {
if (file.seek(desiredBlock * blockSize)) {
qint64 bytes = file.read(reinterpret_cast<char*>(vect.data()), blockSize);
if (bytes != blockSize)
qFatal("Oops!");
qDebug() << vect;
}
}
To copy to clipboard, switch view to plain text mode
Effectively just dropping the raw bytes into the internal buffer of the QVector.
You can use:
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
// byte swapping code
#endif
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
// byte swapping code
#endif
To copy to clipboard, switch view to plain text mode
at line 12 if you need portability.
Bookmarks