如何在C/C++中將short類型數組轉換爲double類型數組?將短陣列轉換爲雙精度數組
我有從wav文件讀取音頻數據的代碼,輸出是short類型的數組。所以現在我想用這個數據進行FFT(我不想使用庫)。
任何技巧或想法?
如何在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