当前位置:  开发笔记 > 编程语言 > 正文

Java中的位操作和输出

如何解决《Java中的位操作和输出》经验,为你挑选了2个好方法。

如果你有二进制字符串(字面意思是只包含1和0的String对象),你如何将它们作为位输出到文件中?

这是我正在研究的文本压缩器; 它仍然困扰着我,终于让它运转起来真好.谢谢!



1> Tomer Gabel..:

最简单的是简单地连续8个字符,将它们变成一个字节并输出该字节.如果您可以识别流末尾,则在末尾填充零,或者在文件开头添加长度(以位为单位)的标题.

内部循环看起来像:

byte[] buffer = new byte[ ( string.length + 7 ) / 8 ];
for ( int i = 0; i < buffer.length; ++i ) {
   byte current = 0;
   for ( int j = 7; j >= 0; --j )
       if ( string[ i * 8 + j ] == '1' )
           current |= 1 << j;
   output( current );
}

你需要做一些调整,但这是一般的想法.



2> finnw..:

如果你很幸运,java.math.BigInteger可能会为你做一切.

String s = "11001010001010101110101001001110";
byte[] bytes = (new java.math.BigInteger(s, 2)).toByteArray();

这取决于字节顺序(big-endian)和右对齐(如果位数不是8的倍数)是你想要的,但是之后修改数组可能比自己进行字符转换更简单.


危险!该解决方案永远不会在输出字节数组中产生前导零,即使它们属于它们.
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有