2012-07-11 104 views
1

我怎麼能轉換SInt16doubleFloat32double?我知道我可以轉換SInt16Float32這樣的:如何將`SInt16'轉換爲'double'?

double *buffer; 
SInt16* frames; 

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

但我使用許多C函數,我想將數據傳遞給他們double

現在我用這個代碼:

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

    Float32 currentFrame = frames[i]/32768.0f; 

    buffer[i] = currentFrame; 
} 

,但我不知道結果是正確的。

+4

是什麼讓你認爲結果是「不正確」? – 2012-07-11 08:00:16

+0

@PaulR我在整個程序結束時有不正確的值。只是想,也許這個轉換有些問題。 – andrey 2012-07-11 08:07:24

+0

最簡單的就是打印出幾個值,看看它是否符合您的預期。 – 2012-07-11 08:07:44

回答

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 conversionframes[i]將自動轉換爲double