如何将`SInt16'转换为'double'?

时间:2012-07-11 07:55:01

标签: c type-conversion

如何将SInt16转换为doubleFloat32转换为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;
}

但我不确定结果是否正确。

1 个答案:

答案 0 :(得分:1)

原始C类型(整数,字符,浮点类型)可以使用强制转换进行相互转换。因此,给定有符号整数值my_signed_integer,您可以使用简单的强制转换将其转换为double

((double) my_signed_integer)

我猜你的Sint16Float32是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 conversionframes[i]会自动转换为double