12

WAV ファイル形式が 16 ビット サンプルに符号付き整数を使用することは知っています。また、それらをリトル エンディアンの順序で格納します。つまり、最下位の 8 ビットが最初に来て、次に次のビットが来るということです。最初のバイトの特殊符号ビット、または常に最上位ビット (最高値) の特殊符号ビットです。 ?

意味:
WAVフォーマットの符号ビットはどれ?

++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
|| a | b | c | d | e | f | g | h || i | j | k | l | m | n | o | p ||
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
--------------------------- here -> ^ ------------- or here? -> ^

私またはp?

4

2 に答える 2

17

符号付き int、リトルエンディアン:

バイト 1(lsb) バイト 2(msb)
----------------------------------
7|6|5|4|3|2|1|0 | 7|6|5|4|3|2|1|0|
----------------------------------
                  ^
                  | |
                 符号ビット

一部の外部メディアに対して short int を読み書きする場合にのみ、そのことを気にする必要があります。プログラム内では、プラットフォームがビッグ エンディアンかリトル エンディアンかに関係なく、符号ビットが最も重要なビットです。

于 2010-10-08T21:15:45.017 に答える
14

符号ビットは、2 の補数のマシン (x86 など) の最上位ビットであるため、リトルエンディアン形式の最後のバイトになります。

アスキーアートを含まないものになりたくなかったからです... :)

+---------------------------------------+---------------------------------------+
|              first byte               |              second byte              |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
   ^--- lsb                                               msb / sign bit -----^

ビットは基本的に、ほとんどの人がビットについて考える方法から「逆向き」に表されます。これが、上位バイトが最後である理由です。しかし、それはすべて一貫しています。「ビット 15」は、アドレスが機能するように「ビット 0」の後に続きますが、それでもワードの最上位バイトの最上位ビットです。ハードウェアは最低レベルを除いてバイト単位で対話するため、少しいじる必要はありません。したがって、バイトを読み取ると、期待どおりに見えます。ワードの最上位ビット (一度に 1 バイトずつ読み取る場合は最後のバイト) を見ると、符号ビットがあります。

ただし、2 の補数は特定のビットを「符号ビット」として正確に指定するわけではないことに注意してください。これは、数値の表現方法の非常に便利な副作用です。16 ビットの数値の場合、-x は 32768+x ではなく 65536-x に等しくなります (これは、上位ビットが厳密に符号である場合に当てはまります)。

于 2010-10-08T21:04:55.407 に答える