2013-06-06 17 views
5

Sadece 8 bite ihtiyacım olduğu için bir baytta depolanacak bir bit maskesi var. Onu yaratıyorum zaman bir dize olarak bunu (Ben bu şekilde daha kolay olacağını düşündüm) ve sonra Byte.parseByte(mask,2) bir byte haline çevrilmesi, ama belirli değerleri çalışmıyor bulundu:Neden Byte.parseByte ("10000001", 2) bir NFE atar?

String bits="10000001"; 
Byte.parseByte(bits,2);// throws a NFE 

Ama bunu yaparsam: hiçbir sorun yoktur

byte b=(byte)0x81; //1000 0001 

.

PS: Ben geçici bir çözüm, byte b=(byte)Integer.parseInt(bits, 2); buldum ama yine de ben byte

+1

Kısa cevap: Çünkü bayt imzalandı. –

+0

Evet, biliyorum, ilk 1, bunun negatif bir sayı olduğunu söylüyor. Benim amacım sorun olmamalı. Bir String alırsam -127'yi nasıl saklayabilirim? –

cevap

7

10000001 içine 8 bit dönüştürmek olamaz neden ikili 129 ondalık olduğunu bilmek istiyorum. Ergo, Byte.MAX_VALUE'dan daha büyük.

Çözümün

byte b=(byte)0x81; //1000 0001 

değerine -127 sahip b sonuçlanacaktır. Aynı durum, geçici çözümünüz için de geçerlidir.

+0

Yani sadece Byte.parseByte işlevi belirli bir baytı saklayamıyor, daha önce bir sayıya dönüştürmesi gerekiyor. 1'leri eklemek ve sonra onları değiştirmek gibi bir şey yaptığını düşündüm. 0x81 de 129 ama çalışıyor –