2012-07-11 69 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