2011-12-23 2 views
3

C/C++에서 short 형식의 배열을 double 형식의 배열로 변환하는 방법은 무엇입니까?반바지 배열을 double 배열로 변환

wav 파일에서 오디오 데이터를 읽는 코드가 있고 출력 형식이 short 형식입니다. 이제 FFT에이 데이터를 사용하고 싶습니다 (라이브러리를 사용하고 싶지 않습니다).

트릭이나 아이디어가 있습니까?

+2

왜 간단한 루프를 수행 할 수 없습니까? 아니면 SSE를 사용하여보다 효율적인 솔루션을 요구하고 있습니까? – Mysticial

답변

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 범위로 정규화하려고합니다. 그의 입력은 unsigned 일 가능성이 높으므로 각 요소에 대해 (src-32K)/32K가 필요합니다. –

+4

sizeof (src)/sizeof (short)보다 sizeof (src)/sizeof (src [0])를 선호합니다. 나중에 src의 유형을 변경해야합니다. –

관련 문제