将短阵列转换为双精度数组
如何在C/C++中将short类型数组转换为double类型数组?将短阵列转换为双精度数组
我有从wav文件读取音频数据的代码,输出是short类型的数组。所以现在我想用这个数据进行FFT(我不想使用库)。
任何技巧或想法?
你不能转换该数组;但是,您可以创建一个新的数组转换值:
#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”。 – 2011-12-23 18:20:19
优先于sizeof(src)/ sizeof(short)''sizeof(src)/ sizeof(src [0])''。以防将来改变src的类型。 – 2011-12-23 19:41:48
为什么不能一个简单的循环呢?或者您是否在使用SSE寻求更高效的解决方案? – Mysticial 2011-12-23 17:44:01