【发布时间】:2016-11-27 22:00:10
【问题描述】:
我尝试创建 mpegts 演示时间戳。它是 5 个字节的长度。我在 VLC 播放器的源代码中找到了解决方案。它看起来像这样(在 C 语言代码中):
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 个字节。二进制视图:
1001 0010 1110
在 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 但这种认识太难了。对于一次性操作,需要创建太多的辅助类,如 Bit1、Bit2、Bit3 等...
【问题讨论】:
-
您确定输入位如何映射到输出字节,例如将其写在纸上,然后使用Java bit-manipulation operators 构建该结果。
-
@Andreas,我知道位操作运算符。例如,我可以处理 String 中的 40 位,然后转换为 long,但 long 的大小为 4 字节。 Double 有 8 个字节。但我需要 5 个字节。我不知道我该怎么做。
标签: java bit-manipulation byte