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);  

我理解类型转换 (byte) 部分,但没有 (byte)(int) 在一起。long 类型的令牌是否必须一次降级一种简单类型?你不能省略 (int) 并得到相同的结果吗?

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

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