作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从 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/
我是一名优秀的程序员,十分优秀!