2011-07-18 42 views
0

符号なし8ビットPCMストリーム(0-255)を符号付き8ビットPCMストリーム(-128-127)に変換する方法を教えてください。 0が-128になり、255が127になるように、符号なしバイトから128を減算するのと同じくらい簡単ですか?それとももっと複雑ですか? ありがとう!8ビット符号なしPCMを8ビット符号付きPCMに変換

+0

この問題を解決するために使用するプログラミング言語のタグを追加する必要があります。 – Nobody

答えて

0

なぜあなたはそれを試してみませんか? 私の意見では十分ですが、どの言語を使用しているのか分かりません。

負の値の内部表現は2の補数であることに注意してください。 オーバーフローを避けるため、最も安全なのはsigned intサイズです。

+0

私は書かなかったいくつかのコードを見ています。署名されていない署名に変換するのは変です。実際には、ここには次のようなものがあります: "signed char result =((符号付きchar)(x + 128))* 257;" (Cコード)。変数 "x"は "unsigned char"型で、変換するサンプルが含まれています。私はこのコードをまったく手に入れません。 * 257はどこから来たのですか?しかし、それは動作します! – Andy

+0

よく257で乗算してから、チャンクサイズにクランプするのは1で乗算するようなので、うまくいくはずですが、257を残すことができます。元のプログラマーが0-1の範囲を拡大して問題を抱えたが、誰が知っているのだろうか? – Nobody

+0

うん、何も変わらない* 257を残しているようです。ですから、これを削除して何も中断しないことを願っています。おそらく古代のコンパイラバグのいくつかの回避策でしたか? – Andy

0

コメントに投稿したコードについては、128を引いたものが前の操作と逆になり、署名されたデータが返されます。

関連する問題