java语法问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:13:48
public static int convertEndian(int iSrc, int iUsedLen) {
int iResult = 0;
int src = iSrc;

for (int i = 0; (i < INTSIZE) && (i < iUsedLen); i++) {
iResult <<= BITSLENGTH;
iResult |= (src & 0xFF);
src >>>= BITSLENGTH;
}

return iResult;
}

这个方法是干吗的,能详细解释一下语法么

整型数据的大小端转换程序
有三个未知符号:BITSLENGTH iUsedLen INTSIZE
作如下假设:
const static int BITSLENGTH = 8;//表示一个字节的位长
const static int INTSIZE = 4;//表示本平台下整数的长度,在java中是4
int iUsedLen;//使用的到的字节数,合理的取值应该是1-4

iResult<<=BITSLENGTH;//左移一个字节
iResult |= (src & 0xff);//src & 0xff的意思是取src的低字节,高位3字节置0。把这个结果同iResult进行或运算,并把此结果付给iResult。例如,其始时iResult = 0x00 00 00 00,src=0xaa bb cc dd,那么:
(src & 0xff)=(0xaa bb cc dd & 0x00 00 00 ff)=0x00 00 00 dd
iResult |= (src & 0xff)的意思是:iResult=0x00 00 00 00 | 0x 00 00 00 dd = 0x00 00 00 dd。
然后src>>>=BITSLENGTH是让src逻辑右移8位,结果是0x00 aa bb cc。

循环第二次,iResult<<=BITSLENGTH后iResult = 0x00 00 dd 00;
iResult|=(src & 0xff)使得iResult=0x00 00 dd 00 | (0x00 aa bb cc & 0x00 00 00 ff)=0x00 00 dd 00 | 0x00 00 00 cc = 0x00 00 dd cc。
然后src继续逻辑右移8位,结果是0x00 00 aa bb。

后面就省略了。你可以看出来,iResult是iSrc个字节的翻转,如果iSrc=0xaa bb cc dd,那么循环4此后iResult=0xdd cc bb aa