我试图将以下二进制表示法放入一个4字节的字节缓冲区中。但由于Java没有签名,我遇到了麻烦:11111111000000001111111100000000
ByteBuffer bb = ByteBuffer.allocate(8);
bb.putInt(Integer.parseInt("11111111000000001111111100000000", 2));
//throws numberformatexception
否定最重要的位似乎改变了二进制字符串值,因为两个赞美的工作原理如下:
bb.putInt(Integer.parseInt("-1111111000000001111111100000000", 2));
System.out.println(Integer.toBinaryString(bb.getInt(0)));
//prints 10000000111111110000000100000000
值非常重要,因为以后它将被视为unsigned int。我应该如何将值(以及以1开头的未来值)添加到bytebuffer?
答案 0 :(得分:1)
首先将其解析为long
,然后转换结果:
int value = (int) Long.parseLong("11111111000000001111111100000000", 2);
处理int
空间不足的事实,因为long
中有足够的空间。在转换之后,该值将以负int
结束,但这很好 - 它将最终在字节缓冲区中正确结束。
编辑:如评论中所述,在Java 8中,您可以使用Integer.parseUnsignedInt("...", 2)
。
答案 1 :(得分:1)
您还可以使用番石榴的UnsignedInts.parseUnsignedInt(String string, int radix)和UnsignedInts.toString(int x,int radix)方法:
int v = UnsignedInts.parseUnsignedInt("11111111000000001111111100000000", 2);
System.out.println(UnsignedInts.toString(v, 2));
答案 2 :(得分:0)
试试这个
bb.putInt((int)Long.parseLong("11111111000000001111111100000000", 2));