2012-02-04 21 views
5

私は誰かが実際にこのラインで何が起こっているのかを説明することができます、私は次の行charをbyteに変換するには?

stringBytes[i] = (byte) (stringChars[i] & 0x00FF); 

に出くわしたオープンソースコードを勉強していました?

+2

「&0x00FF」は冗長です。 –

答えて

9

CharはJavaの2バイトから成りますが、もちろんバイトは1バイトです。この操作中のSO

:それは1バイトにする:

stringBytes[i] = (byte) stringChars[i] & 0x00FF 

char値(16ビット)数0x00FFに(0000 0000 1111 1111バイナリ)とバイナリ論理積されています。

バイナリANDINGを8 0s and 8 1sとすると、基本的には8ビットをマスクしてchar値の最上位ビットまたは最上位ビット(MSB)をマスクしているため、最上位ビットまたは最下位ビット(LSB)はそのまま残ります。次にコードは、キャスト(byte)を使用してバイトに結果の値を割り当てます。それ以外の場合はintの値です。

+1

あなたは8 LEFTのほとんどのビットをマスクし、ほとんどのビットを右に保ちます。 and演算子を使用すると、マスクのLEFT部分のゼロは結果をゼロに強制します。 – Tony

+0

ありがとうございました。私は今それを修正しました。 – anubhava

2

0x00FFとの論理積は、最後の8個の有効ビットと0個の他のビットのみを保持します。

E.g.: 
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5 
+0

A5は本当に0xA5でなければならないと確信しています。ちょうど一貫性のためです。 – Chexxor

関連する問題