Little-Endian Signed Integer - PullRequest
       2

Little-Endian Signed Integer

9 голосов
/ 09 октября 2010

Я знаю, что формат файла WAV использует целые числа со знаком для 16-битных выборок. Он также сохраняет их в порядке с прямым порядком байтов, то есть младшие 8 битов идут первыми, затем последующими и т. Д. Является ли бит специального знака в первом байте или битом специального знака всегда старший бит (самое высокое значение)

Значение:
Какой бит знака в формате WAV?

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

я или р?

Ответы [ 2 ]

12 голосов
/ 09 октября 2010

подписано 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

Это нужно учитывать только при чтении / записи короткого int на некоторый внешний носитель.В вашей программе знаковый бит является самым значимым битом в короткой версии, независимо от того, на какой платформе используется байтовый код - младший или младший.

10 голосов
/ 09 октября 2010

Знаковый бит является самым значимым битом на любом компьютере с двумя дополнениями (например, x86) и, таким образом, будет в последнем байте в формате с прямым порядком байтов

Просто потому, что я не хотелбыть тем, кто не включает ASCII art ...:)

+---------------------------------------+---------------------------------------+
|              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 (что было бы в случае, если бы старший бит был строго знаком).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...