2012-04-05 2 views
1

このコードスニペットの数学を理解しようとしています。常に8桁のトークンが提供されます。 long型のクラスに入ります。トークンは、ストリームを介して送信される別々のバイトに分割されています。ダブルタイプのトークンキャスト

long token = 85838276; 

byte cp[] = { 
      1, 0, 0, 0, 0 
      }; 

cp[4] = (byte)(int)token; // not sure what would become of token 
cp[3] = (byte)(int)(token >> 8); 
cp[2] = (byte)(int)(token >> 16); 
cp[1] = (byte)(int)(token >> 24); 

私は型キャスト(バイト)の部分を理解するが、一緒に(バイト)(int)を持っていません。 long型のトークンは、一度に1つの単純な型を下げる必要がありますか?あなたは(int)を省略して同じ結果を得ることができませんでしたか?

明確にするために、順序が重要か、単にcp [4]からcp [1]に書き込まれていますか。 私はcp [4]のトークンが元の値と等しくないことを理解しています。なぜなら、バイト型が保持できる最大値は127であるからです。元のトークンが宛先に到達したら元のトークンを再作成できますか?

最後に、私はこれをPHPで再作成したいと思います。私は文字列がすでにバイトストリームであることを知っています。送信される各文字は1バイトになります。それぞれの文字が表す整数値と等しい文字列を送る必要がありますか?のような41

更新日: したがって、ルイスワッサーマンの答えによると、タイプキャストバイトには、最後のバイトだけが保持されます。

Token in binary: 101000111011100100111000100 // cp[4] = 11000100 

Token shifted 08: 1010001110111001001 // cp[3] = 11001001 

Token shifted 16: 10100011101 // cp[2] = 00011101 

Token shifted 24: 101 // cp[1] = 101 

答えて

3

は、私の知る限り、(byte) (int)は、この文脈で(byte)に相当します。

これはすべてのダブルキャストでは当てはまりませんが、ここでは真実と思われます。彼らは両方ともキャストコンバージョンを「絞り込んで」います。

+0

だから、そのタイプに許可されている最大数よりも大きな数値をキャストするとどうなりますか? – jmm

+0

整数型の場合、_truncated_を取得します。つまり、 '(int)longValue'は' longValue'の最後の4バイトをとり、 '(byte)intValue'は' intValue'の最後のバイトをとります。だから '(byte)(int)longValue'は' longValue'の最後のバイトを取ります。 –

関連する問題