2016-04-12 44 views
0

Dize ile temsil edilen bit kümesini dönüştürmem gerekiyor. Dizgim 8'in bir katıdır, bu yüzden 8'i bölebilir ve 8 bitlik alt dizeleri alabilirim. Sonra bu alt dizeleri bayt olarak çevirip HEX'e yazdırmam gerekiyor. Örneğin:Bit dizgisi bayttır. Değer aralık dışı - dönüştürme hatası java

String seq = "0100000010000110"; 

seq çok daha uzun, ama bu konu değil. Aşağıda, seq numaralı iki alt dizgiyi görebilirsiniz. Ve onlardan biriyle sorunum var, neden? hesap makinesi, bir hata var neden

 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 

Ben dönüştürmek için bir sorun değildir anlayamıyorum. Yani, Tamsayı'u denedim ve yerine ffffff86 var.

Lütfen yardım edin: Neden? ve sorunun nasıl önleneceği.

System.out.println("s_error set of bits in DEC - "+in + " and now in HEX - "+Integer.toHexString((byte)in & 0xFF)); 

0XFF eklendi:

cevap

0

Eh, ffffff önlemek için nasıl buldular. Kötü olan şey - hala bu ffffff nereden geldiğini bilmiyorum ve ben ne yaptım, açık değil. Bir çeşit bayt çarpma mı, yoksa maskeleme mi? Kayboldum.