Ich versuche, mpegts Präsentationszeitstempel zu erstellen. Es ist 5 Bytes lang. Ich habe eine Lösung im Quellcode des VLC-Players gefunden. Es sieht so aus (in C lang Code):Wie kann ich Bits in Byte-Array in Java schreiben?
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;
Das bedeutet, ich muss 5 Bytes von 40 Bits sammeln. Zum Beispiel muss ich 5 Bytes von 2350 Dezimalzahl. Binary Ansicht:
Nach VLC Manipulation Ich muss diese binäre Sicht haben:
0010 000 1 000000000000000 1 000100100101110 1
Hex Ansicht:
21 00 01 12 5D
Wie kann ich es tun in Java?
Auch ich habe Java-Lösung auf GitHub gefunden: https://github.com/taktod/myLib/blob/master/myLib.MIT/myLib.container.mpegts/src/main/java/com/ttProject/container/mpegts/field/PtsField.java Aber diese Erkenntnis ist zu schwierig. Für einen einmaligen Betrieb ist es notwendig, zu viele Hilfsklassen wie Bit1 zu erstellen, Bit2, Bit3, etc ...
Sie bestimmen, wie Sie Ihre Eingabe Karte Bits um Bytes auszugeben, z schreibe es auf Papier und benutze dann [Java-Bitmanipulationsoperatoren] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html), um dieses Ergebnis zu erstellen. – Andreas
@Andreas, ich weiß über Bit-Manipulationsoperatoren. Zum Beispiel kann ich 40 Bits in String verarbeiten und nach der Konvertierung in long, aber lang hat 4 Bytes Größe. Double hat 8 Bytes. Aber ich brauche 5 Bytes. Ich habe keine Ahnung, wie ich das machen kann. – Virkom