2012-07-11 13 views
1

SInt16double 또는 Float32에서 double으로 변환하려면 어떻게해야합니까?`SInt16 '을`double'로 어떻게 변환합니까?

double *buffer; 
SInt16* frames; 

for (i = 0; i < number_of_frames; i++) { 
    Float32 currentFrame = frames[i]/32768.0f; 
} 

하지만 많은 C의 기능을 사용하고 있는데 나는 double 그들에게 데이터를 전달하려는 : 내가 SInt16이 같은 Float32에 변환 할 수 있습니다 알고 있습니다.

지금 나는이 코드를 사용합니다

for (i = 0; i < number_of_frames; i++) { 

    Float32 currentFrame = frames[i]/32768.0f; 

    buffer[i] = currentFrame; 
} 

을하지만 결과가 정확한지 모르겠어요.

+4

왜 결과가 "올바르지 않다"고 생각합니까? –

+0

@ Paulul 전체 프로그램 끝에 잘못된 값이 있습니다. 이 변환에 문제가있을 수 있습니다. – andrey

+0

가장 단순한 것은 두 개의 값을 출력하고 예상 한 결과인지 확인하는 것입니다. –

답변

1

프리미티브 C 유형 (정수, 문자, 부동 소수점 유형)은 캐스트로 상호 변환 될 수 있습니다. 그래서 부호있는 정수 값 my_signed_integer을 주어, 당신은 간단한 캐스트와 double로 변환 할 수 있습니다 :

:

((double) my_signed_integer) 

를 내가 추측하고있어 당신의 Sint16Float32하는 형식 정의는, 당신은 같은 일을 계속 할 수 있도록

((double) my_SInt16_value) /* Just use this expression as a double 
           because it IS a double. */ 

결국,이 의미

for (i=0; i<number_of_frames; i++) 
    { 
    buffer[i] = ((double) frames[i])/32768.0; 
    } 

는 사실,이 캐스트가 필요하지 않습니다. implicit conversion으로 인해 frames[i]은 자동으로 double으로 변환됩니다.

관련 문제