gpt4 book ai didi

c++ - 如何从 QFile 中读取带符号的 16 位整数?

转载 作者:行者123 更新时间:2023-11-28 02:24:55 31 4
gpt4 key购买 nike

我想从 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);

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

我已经试过了:

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

这对一些样本有效,但有些样本被完全误解为错误的值。我在audacity中对比了时间信号的情节。

有没有更好的办法?

最佳答案

无论它是否是“更好”的解决方案,我发现在这些类型的情况下使用 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

关于c++ - 如何从 QFile 中读取带符号的 16 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079713/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com