我有二进制字符串String A =“1000000110101110”.我想在
java中将此字符串转换为长度为2的字节数组
我试图通过各种方式将其转换为字节
>我先将该字符串转换为十进制,然后将代码应用于存储到字节数组中
int aInt = Integer.parseInt(A,2); byte[] xByte = new byte[2]; xByte[0] = (byte) ((aInt >> 8) & 0XFF); xByte[1] = (byte) (aInt & 0XFF); System.arraycopy(xByte,record,xByte.length);
但是存储到字节数组中的值是负数
xByte[0] :-127 xByte[1] :-82
哪个是错误的值.
我也试过用
byte[] xByte = ByteBuffer.allocate(2).order(ByteOrder.BIG_ENDIAN).putInt(aInt).array();
但它会在上面的行中引发异常
java.nio.Buffer.nextPutIndex(Buffer.java:519) at java.nio.HeapByteBuffer.putInt(HeapByteBuffer.java:366) at org.com.app.convert.generateTemplate(convert.java:266)
解决方法
你得到的答案
xByte[0] :-127 xByte[1] :-82
是正确的.
这被称为2的赞美Represantation.
第1位用作有符号位.
0 for +ve 1 for -ve
如果第1位为0,则计算为常规位.
但如果第1位为1,则从128中扣除7位的值,并以-ve形式呈现答案.
在你的情况下
第一个值是10000001
所以1(第1位)用于-ve和128-1(最后7位)= 127
所以价值是-127
有关详细信息,请参阅2的补码表示.