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] に書かれているだけですか。バイト型が保持できる最大値は 127 であるため、cp[4] のトークンは元の値と等しくないことに気付きました。元のトークンが宛先に到達したら、元のトークンを再作成することは可能ですか?

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

更新:Louis Wassermanの回答によると、型キャストをバイトにすると、最後のバイトのみが保持されます。

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
4

1 に答える 1

3

私が知る限り、このコンテキストで(byte) (int)は同等です。(byte)

すべてのダブルキャストに当てはまるわけではありませんが、ここでは当てはまります。どちらもキャスト変換を「狭めています」。

于 2012-04-05T17:57:34.053 に答える