我需要转换通过String表示的一组位。我的字符串是8的倍数,所以我可以把它除以8,得到里面有8位的子字符串。然后我必须将这些子字符串转换为字节并以十六进制打印。例如:
String seq = "0100000010000110";
seq要长得多,但这不是主题。下面您可以看到seq中的两个子字符串。和其中一个我有麻烦,为什么?
String s_ok = "01000000"; //this value is OK to convert
String s_error = "10000110"; //this is not OK to convert but in HEX it is 86 in DEC 134
byte nByte = Byte.parseByte(s_ok, 2);
System.out.println(nByte);
try {
byte bByte = Byte.parseByte(s_error, 2);
System.out.println(bByte);
} catch (Exception e) {
System.out.println(e); //Value out of range. Value:"10000110" Radix:2
}
int in=Integer.parseInt(s_error, 2);
System.out.println("s_error set of bits in DEC - "+in + " and now in HEX - "+Integer.toHexString((byte)in)); //s_error set of bits in DEC - 134 and now in HEX - ffffff86
我不明白为什么会有错误,对于计算器来说,转换10000110不是问题。所以,我尝试了Integer,有ffffff 86而不是简单的86 请帮忙:为什么?以及如何避免这个问题。
好吧,我发现了如何避免ffffff:
System.out.println("s_error set of bits in DEC - "+in + " and now in HEX - "+Integer.toHexString((byte)in & 0xFF));
添加了0xFF。糟糕的是,我仍然不知道那些ffffff是从哪里来的,我也不清楚我做了什么。这是某种字节乘法还是屏蔽?我迷路了。