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)在一起。长型的令牌是否必须一次减少一种简单类型?你能不能省略(int)并得到相同的结果?
为了清晰起见,命令是重要的还是仅从cp [4]写入cp [1]。 我意识到cp [4]中的标记不会等于原始值,因为字节类型可容纳的最大值是127.是否有可能在原始标记到达目的地后重新创建它?
最后我想在php中重新创建这个。我知道一个字符串已经是一个字节流。每个字符发送将是一个字节。我需要发送一个字符串,每个字符都等于它所表示的整数值。比如一个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
那么当你输入一个大于该类型所允许的最大值的数字时会发生什么? – jmm 2012-04-05 18:24:44
对于整数类型,它得到_truncated_:所以'(int)longValue'只需要'longValue'的最后四个字节,'(byte)intValue'接受'intValue'的最后一个字节。所以'(byte)(int)longValue'只是'longValue'的最后一个字节。 – 2012-04-05 18:29:31