如何将SInt16
转换为double
或Float32
转换为double
?我知道我可以将SInt16
转换为Float32
,如下所示:
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;
}
但我不确定结果是否正确。
答案 0 :(得分:1)
原始C类型(整数,字符,浮点类型)可以使用强制转换进行相互转换。因此,给定有符号整数值my_signed_integer
,您可以使用简单的强制转换将其转换为double
:
((double) my_signed_integer)
我猜你的Sint16
和Float32
是typedef,所以你仍然可以做同样的事情:
((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
。