将短整型数组转换为双精度浮点型数组

3

如何在C/C++中将short类型的数组转换为double类型的数组?

我有一段代码用于从wav文件中读取音频数据,输出的是short类型的数组。现在我想使用这些数据进行FFT(我不想使用库)。

有什么技巧或想法吗?


2
为什么不能用简单的循环呢?或者你是在寻求使用SSE更高效的解决方案? - Mysticial
1个回答

7

你不能 转换 数组;但是你可以使用转换后的值创建一个新的数组:

#include <iterator>
#include <algorithm>

short src[10] = ...;

double dst[sizeof(src)/sizeof(short)];

std::copy(std::begin(src), std::end(src), dst);  // generic, C++11
std::copy(src, src + 10, dst);                   // a bit more hackish

更好的方法是使用std::array<float, 10> src;等方式。
如果您的“数组”确实是动态数据结构,那么就更容易了:
std::vector<float> src = ... ;
std::vector<double> dst(src.begin(), src.end());

很可能他希望将其标准化为范围在-1.0到1.0之间,因为这是音频中的标准。他的输入很可能是无符号的,因此他需要对每个元素进行(src - 32K)/32K处理。 - edA-qa mort-ora-y
5
sizeof(src)/sizeof(src[0])写成代码中的偏好写法,而不是sizeof(src)/sizeof(short)。以防将来更改了src的类型。 - Martin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接