2016-11-27 3 views
0

Я пытаюсь создать временную метку презентации mpegts. Это 5 байтов. Я нашел решение в исходном коде VLC-плеера. Это выглядит так (в коде C):Как записать бит в массив байтов в java?

bits_write(&bits, 4, i_pts_dts); // '0010' or '0011' 
bits_write(&bits, 3, i_pts >> 30); 
bits_write(&bits, 1, 0x01); // marker 
bits_write(&bits, 15, i_pts >> 15); 
bits_write(&bits, 1, 0x01); // marker 
bits_write(&bits, 15, i_pts); 
bits_write(&bits, 1, 0x01); // marker 
i_header_size -= 0x5; 

Это означает, что я должен собрать 5 байт из 40 бит. Например, мне нужно 5 байт с 2350 десятичным числом. Двоичный вид:

После манипуляций VLC я должен иметь этот двоичный вид:

0010 000 1 000000000000000 1 000100100101110 1 

Hex вид:

21 00 01 12 5D 

Как я могу сделать это в Java?

Также я нашел Java-решение на GitHub: https://github.com/taktod/myLib/blob/master/myLib.MIT/myLib.container.mpegts/src/main/java/com/ttProject/container/mpegts/field/PtsField.java Но это осуществление слишком сложно. Для работы единовременной необходимо создать слишком много вспомогательных классов, как bit1, Бит2, BIT3 и т.д ...

+0

Вы определяете, как ваши входные биты карт для вывода байтов, например напишите его на бумаге, затем используйте [операторы манипуляции Java] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html), чтобы построить этот результат. – Andreas

+0

@ Andreas, я знаю о операторах манипуляции бит. Например, я могу обработать 40 бит в String и после преобразования в long, но long имеет размер 4 байта. Двойной имеет 8 байтов. Но мне нужно 5 байтов. Я не знаю, как это сделать. – Virkom

ответ

0

Это просто бита манипуляция:

int dts = 2;  // must be 2 or 3 
long pts = 2350; // must be less than 8,589,934,592 

byte[] output = new byte[] { 
     (byte) (dts << 4 | pts >> 30 | 1), 
     (byte) (pts >> 22), 
     (byte) (pts >> 15 | 1), 
     (byte) (pts >> 7), 
     (byte) (pts << 1 | 1) 
}; 
for (byte b : output) 
    System.out.printf("%02x ", b); // prints: 21 00 01 12 5d 
+0

О, хорошо, спасибо. – Virkom

Смежные вопросы