2013-06-06 3 views
5

私は8ビットしか必要ないので、1バイトに格納するビットマスクを持っています。私はそれを作成していたとき、私は文字列としてそれを行う(私はそれがこのように容易になるだろうと思った)、その後、私はByte.parseByte(mask,2)でバイトにそれを変換し、私はそれが特定の値のために動作しませんが見つかりました:なぜByte.parseByte( "10000001"、2)がNFEをスローしますか?

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

しかし、私がしなければ:問題ありません

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

PS:私は、回避策を見つけbyte b=(byte)Integer.parseInt(bits, 2);とにかく、私は

+1

短い答え:「バイト」が署名されているためです。 –

+0

はい、私はそれを知っています、最初の1はそれが負の数であると言います。私のポイントは問題ではないはずです。私はストリングを受け取っていれば、どうすれば-127を保存できますか? –

答えて

7

10000001バイナリが129 10進数のバイトに8ビットに変換できない理由を知りたいです。エルゴ、それはByte.MAX_VALUEより大きい。

あなたのソリューション

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

は値-127を持つbになります。これはあなたの回避策にも当てはまります。

+0

それはちょうどByte.parseByte関数は、指定されたバイトを格納することができません、それは前に数値に変換する必要があります。私はそれが1を加えて、それをシフトするような何かをすると思った。 0x81も129ですが動作します –

関連する問題