如何从QFile读取带符号的16位整数?

时间:2015-06-26 18:19:59

标签: c++ qt c++11

我想从Qt中的音频文件中读取16位整数样本值。

char tempbytes[3]; /// 
int sampleposition;
int sample;

QFile file(sourcepath);

if (! file.open(QIODevice::ReadOnly | QIODevice::Text)) return;

sampleposition = 120
file.seek(sampleposition );
file.read(tempbytes, 2);   

现在我有一个char数组,但我想将其转换为16位有符号整数值。波形文件中的字节顺序是littleendian。

我已经尝试过:

sample = qFromLittleEndian<qint16>((uchar*)tempbytes);

这适用于某些样本,但有些样本完全被误解为错误的值。我将大胆时间信号的图表进行了比较。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

无论它是否是“更好”的解决方案,我发现在这些类型的案例中使用QDataStream更为简单。它具有reading 16-bit integers的重载。

这是一个非常基本的例子:

// Open the file and create our data stream
QFile file("filename");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in.setByteOrder(QDataStream::LittleEndian);

// Read a 16-bit sample
qint16 sample;
in >> sample

答案 1 :(得分:0)

源文件是文本文件,因此请不要将其视为文本文件。打开它的正确方法是:

if (! file.open(QIODevice::ReadOnly)) return;