2016-11-27 101 views
0

我嘗試創建mpegts演示文稿時間戳。它是5個字節的長度。我在VLC播放器的源代碼中找到了解決方案。看起來像這樣(在C lang代碼中):如何在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; 

這意味着我必須從40位收集5個字節。例如,我需要2350個十進制數字中的5個字節。二進制觀點:

VLC操作後,我必須有這個二元觀點:

0010 000 1 000000000000000 1 000100100101110 1 

十六進制查看:

21 00 01 12 5D 

我怎麼能做到這一點在Java中?

另外我在GitHub上發現了Java解決方案:https://github.com/taktod/myLib/blob/master/myLib.MIT/myLib.container.mpegts/src/main/java/com/ttProject/container/mpegts/field/PtsField.java 但是這種實現太困難了。對於一次性操作,有必要創造了太多的輔助類,如第1位,第2位,第3位,等等...

+0

你確定你輸入如何位圖輸出字節,例如將它寫在紙上,然後使用[Java位操縱運算符](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)來建立這個結果。 – Andreas

+0

@Andreas,我瞭解位操作符。例如,我可以在字符串中處理40位,並在轉換爲長整型之後,但長整型具有4個字節的大小。 Double有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

噢,很好,thanx。 – Virkom

相關問題