将短阵列转换为双精度数组

问题描述:

如何在C/C++中将short类型数组转换为double类型数组?将短阵列转换为双精度数组

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

任何技巧或想法?

+2

为什么不能一个简单的循环呢?或者您是否在使用SSE寻求更高效的解决方案? – Mysticial 2011-12-23 17:44:01

你不能转换该数组;但是,您可以创建一个新的数组转换值:

#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()); 
+0

很有可能他希望将其标准化到-1.0到1.0的范围,就像音频中的标准一样。他的输入可能是未签名的,因此他需要为每个元素设置“(src - 32K)/ 32K”。 – 2011-12-23 18:20:19

+4

优先于sizeof(src)/ sizeof(short)''sizeof(src)/ sizeof(src [0])''。以防将来改变src的类型。 – 2011-12-23 19:41:48