Я пытаюсь создать временную метку презентации 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 и т.д ...
Вы определяете, как ваши входные биты карт для вывода байтов, например напишите его на бумаге, затем используйте [операторы манипуляции Java] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html), чтобы построить этот результат. – Andreas
@ Andreas, я знаю о операторах манипуляции бит. Например, я могу обработать 40 бит в String и после преобразования в long, но long имеет размер 4 байта. Двойной имеет 8 байтов. Но мне нужно 5 байтов. Я не знаю, как это сделать. – Virkom