2011-12-23 52 views
3

如何在C/C++中將short類型數組轉換爲double類型數組?將短陣列轉換爲雙精度數組

我有從wav文件讀取音頻數據的代碼,輸出是short類型的數組。所以現在我想用這個數據進行FFT(我不想使用庫)。

任何技巧或想法?

+2

爲什麼不能一個簡單的循環呢?或者您是否在使用SSE尋求更高效的解決方案? – Mysticial 2011-12-23 17:44:01

回答

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