Как читать и хранить биты в последовательности байтов (массив Short) в C для отправки данных по сети - PullRequest
0 голосов
/ 03 апреля 2012

Я новичок в решении подобных проблем.Мне нужно извлечь переменную no битов из одного короткого значения.

Как если я прочитал что-то из массива и мне нужно заполнить другой массив, сначала прочитав 10 бит из ранее прочитанного значения, а затем снова 6 битк другому короткому.

Как:

 int pixelNo = 0;
 short pixelValue_part = pixels[pixelNo]; 
 // but here i need only 10 bits , in the second 
 // iteration i might need 4 bits and then so on so forth.

После прочтения этих шортов по частям, мне придется поместить эти части во второй массив последовательно, чтобы упорядочить все пиксели в последовательности.

Примечание:

Проблема состоит в том, чтобы расположить все входные последовательности пикселей в порядке возрастания. Я должен расположить пиксели каждого размером 10 бит.По этой причине мне нужно прочитать первые 10 битов коротких.

Редактировать:


||0,1 512,513 1024,1025 1536,1537 1,2,3 513,514,515 1025,1206,1027 1357,1538,1539 | _ | __ _ _ | ___ | _ __ | _ | __ _ | __ _ ___ | _ __ _ __

У меня есть вышеупомянутый массив в качестве ввода, и я хочу произвести вывод, как следующий массив.


||0,1 2,3 4,5 6,7 ...... 513,514,515,1024,1025,1536,1537 ... | _ | __ _ _ | ___ | _ __ | _ | __ _ | __ _ ___ | _ __ _ __

Все значения массивов являются пикселями некоторого изображения.Таким образом, на самом деле изображение было распаковано в пикселях во входном массиве, а затем второй массив является массивом упорядоченных (отсортированных) пикселей.

1 Ответ

1 голос
/ 03 апреля 2012

Если исходные данные находятся в src, и вам нужен диапазон n бит (начиная с n+pos бит из нижнего конца), то эти биты будут извлечены:

(src >> pos) & ((1<<n)-1)

Разбивка:

  • (1<<n)-1 - маска n 1 (двоичная)
  • src >> pos сдвигает нужные биты до "низа" переменной
  • Тогда мы побитно - и два вместе, эффективно стирая ненужные биты, оставляя позади те, которые вы делаете

Вы можете сделать это для каждой фигуры, которая вам нужна. Чтобы сложить кусочки, вы должны использовать <<, чтобы сдвинуть куски там, где они вам нужны, а затем | (поразрядно или) кусочки вместе.

...