1

またはに変換SInt16するにはどうすればよいですか? 私はこのように変換できることを知っています:doubleFloat32doubleSInt16Float32

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

((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;
  }

実際、このキャストは必要ありません。は暗黙的な変換によりframes[i]に自動的に変換されます。double

于 2012-07-11T08:10:26.893 に答える