что означает 16-битное смещение и 24-битное смещение?Как мне сделать такие расчеты с использованием Java - PullRequest
0 голосов
/ 17 августа 2011

У меня есть спецификация, которая читает столбец, задающий 16-битное смещение для структуры, а другой столбец определяет 24-битное смещение для структуры. Я реализую спецификацию с использованием Java. Мне не ясно, что означает 16-битное смещение / 24-битное смещение и как выполнить такую ​​операцию в Java.

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Похоже, у вас есть один фрагмент данных, который сегментирован на битовые серии.

  • Биты 16-23 - это «16-битное смещение»
  • Биты 24-? это "24-битное смещение"

Данные, вероятно, представляют собой int (32-разрядное целое число со знаком) или long (64-разрядное целое число со знаком) с определенными частями последовательности битов, выделенными для хранения отдельных меньших фрагментов данных.

Один из способов получить значения - использовать битовую маску и вправо shift , например:

int mask = 0xf00; // only bits 16-23 are 1
int data;
int value = data & mask; // zero other bits
value >>= 16; // shift the value down to the end
2 голосов
/ 17 августа 2011

Смещение - это относительный адрес в некотором потоке и / или носителе данных.

16-битное смещение - это смещение, которое хранится в 16-битной переменной / слоте.

Таким образом, если в какой-либо спецификации формата файла говорится, что «следующее поле - это 16-битное смещение», это означает, что вы должны прочитать следующие 2 байта и рассматривать его как относительный адрес.

То, что точно , адреса, зависит от спецификации: это могут быть байты, это могут быть "записи" или что-то еще.

Также обратите внимание, что в Java нет встроенных 24-битных типов данных, поэтому вам придется обойти это, используя int, который имеет 32-битный.

0 голосов
/ 17 августа 2011

Это, вероятно, означает, что граница данных начинается через 16 или 24 бита после начала этой структуры.

Способ доступа к нему зависит от того, как вы получили доступ к структуре с самого начала.

Если вы просто что-то читаете в байтовом массиве, некоторые данные, хранящиеся со смещением 16 бит, можно получить, игнорируя первые два элемента массива (2 байта = 8 бит * 2) или 3 для 24 бит.Если это long или int, это зависит от того, можете ли вы использовать операторы >> и <<.

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