双重类型转换令牌

时间:2012-04-05 17:56:11

标签: java casting binary

尝试理解此代码段的数学运算。提供的令牌始终为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的令牌是否必须一次降低一个简单类型?你不能省略(int)并得到相同的结果吗?

顺序是重要还是仅为了清楚起见,它是从cp [4]写到cp [1]。 我意识到cp [4]中的令牌不会等于原始值,因为字节类型可以容纳的最大值是127.一旦到达目的地,是否可以重新创建原始令牌?

最后我想在php中重新创建它。我知道一个字符串已经是一个字节流。发送的每个字符都是一个字节。我是否需要发送一串字符,每个字符等于它所代表的整数值。比如a为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

1 个答案:

答案 0 :(得分:3)

据我所知,(byte) (int)在此上下文中等同于(byte)

对于所有双重演员来说都不是这样,但在这里似乎也是如此。他们都在“缩小”演员转换。