我知道WAV文件格式使用16位样本的有符号整数。它还以little-endian顺序存储它们,这意味着最低的8位先到,然后是下一个,等等。第一个字节是特殊符号位,还是特殊符号位总是位于最高位(最高值) ?
含义:
哪一个是WAV格式的符号位?
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
|| a | b | c | d | e | f | g | h || i | j | k | l | m | n | o | p ||
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
--------------------------- here -> ^ ------------- or here? -> ^
我或p?
答案 0 :(得分:12)
signed int,little endian:
byte 1(lsb) byte 2(msb) --------------------------------- 7|6|5|4|3|2|1|0 | 7|6|5|4|3|2|1|0| ---------------------------------- ^ | Sign bit
在向某些外部媒体读取/写入短整数时,您只需要关注它。在你的程序中,无论你是在大型还是小型的平台上,符号位都是最重要的位。
答案 1 :(得分:10)
符号位是任何二进制补码机器上最重要的位(如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 -----^
比特基本上代表了大多数人对它们的看法“向后”,这就是为什么高字节是最后一个。但这一切都是一致的; “bit 15”位于“bit 0”之后,就像地址应该工作一样,并且仍然是该字的最重要字节的最高位。你不需要做任何麻烦,因为硬件会根据字节来讨论最低级别 - 所以当你读取一个字节时,它看起来就像你期望的那样。只要查看单词的最高位(或者它的最后一个字节,如果你一次读取一个字节),那就是你的符号位。
但请注意,两个补码并不完全将特定位指定为“符号位”。这只是数字表示方式的一个非常方便的副作用。对于16位数字,-x等于65536-x而不是32768 + x(如果高位严格是符号,则会出现这种情况)。