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

有符号整数,小端:

字节 1(lsb) 字节 2(msb)
---------------------------------
7|6|5|4|3|2|1|0 | 7|6|5|4|3|2|1|0|
----------------------------------
                  ^
                  |
                 符号位

您只需要在向某些外部媒体读取/写入短 int 时关注这一点。在您的程序中,符号位是最重要的位,无论您是在大端还是小端平台上。

于 2010-10-08T21:15:45.017 回答
14

符号位是任何二进制补码机器(如 x86)上的最高有效位,因此将在小端格式的最后一个字节中

只是因为我不想成为不包括 ASCII 艺术的人...... :)

+---------------------------------------+---------------------------------------+
|              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”之后,就像地址应该工作一样,并且仍然是字的最高有效字节的最高有效位。您不必进行任何操作,因为除了最低级别之外,硬件完全按照字节进行通信——因此,当您读取一个字节时,它看起来与您期望的完全一样。只需查看单词的最重要位(或最后一个字节,如果您一次读取一个字节),就会看到您的符号位。

但是请注意,二进制补码并不完全将特定位指定为“符号位”。这只是数字表示方式的一个非常方便的副作用。对于 16 位数字,-x 等于 65536-x 而不是 32768+x(如果高位严格地是符号,就会出现这种情况)。

于 2010-10-08T21:04:55.407 回答