1

如何转换SInt16double或?我知道我可以转换成这样:Float32doubleSInt16Float32

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

1 回答 1

1

原始 C 类型(整数、字符、浮点类型)可以与强制转换相互转换。因此,给定一个有符号整数值my_signed_integer,您可以double通过简单的转换将其转换为 a:

((double) my_signed_integer)

我猜你的Sint16andFloat32是 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;
  }

实际上,你不需要这个演员表。由于隐式转换frames[i],将自动转换为。double

于 2012-07-11T08:10:26.893 回答