byte[] array = new byte[2];
int tmp=0;
//把两个字节转换为整数
tmp = (short)(( array[0] << 8 )|( array[1] & 0xff ));
tmp = tmp & 0xFFFF;请问红色部分是什么意思。
为什么要和0xff与,为什么又和0xFFFF与呢?
int tmp=0;
//把两个字节转换为整数
tmp = (short)(( array[0] << 8 )|( array[1] & 0xff ));
tmp = tmp & 0xFFFF;请问红色部分是什么意思。
为什么要和0xff与,为什么又和0xFFFF与呢?
楼主【qinmi】截止到2008-07-15 14:57:49的历史汇总数据(不包括此帖):
发帖的总数量:14 发帖的总分数:260 每贴平均分数:18
回帖的总数量:21 得分贴总数量:6 回帖的得分率:28%
结贴的总数量:14 结贴的总分数:260
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
oxff 对应 [0,255]
0xffff 对应 [0,65535]
而与上0xff之后 只有最低8位为1
再做或运算时两者就会有区别了
那么这句有什么用。
tmp 就是int 型的,本来就是32位。
public class Test { public static void main(String[] args) {
byte[] array = new byte[2];
int tmp = 0;
array[0] = 62;
array[1] = 38;
System.out.printf("%h\n",array[0]);
System.out.printf("%h\n",array[1]);
//把两个字节转换为整数
System.out.printf("%h\n",array[0]<<8);
System.out.printf("%h\n",array[1]&0xff);
System.out.printf("%h\n",((array[0] << 8) | (array[1]) & 0xff));
tmp = (short) ((array[0] << 8) | (array[1]) & 0xff);
System.out.printf("%h\n",tmp);
tmp = tmp & 0xFFFF;
System.out.printf("%h\n",tmp);
}
}
这个是利用位运算将两个字节拼成一个数字
比如,一个byte占8位,即一个字节
而在表示一个int类型的数据时
在数据传输低层要转换成byte[]数组传输
因此就要将int类型的数转换为字节数组表示
如用一个字节表示高8位,一个字节表示低8位
public class Convert { /**
* @param args
*/
public static void main(String[] args) {
byte[] array = new byte[2];
array[0]= 1;
array[1]= 4;
int tmp=0;
//把两个字节转换为整数
tmp = (short)((array[0]<< 8)|(array[1] & 0xff));
// tmp = tmp & 0xFFFF;
System.out.println(tmp);
}}运行后显示为 : 260
array[0]: 0000 0001 表示高8位
array[1]: 0000 0100 表示低8位
然后操作是这样的: 0000 0001 0000 0000
0000 0000 0000 0100
----------------------
0000 0001 0000 0100
=260至于这一句:tmp = tmp & 0xFFFF;
就是取数据的低16位...
这两句分别表示取array[1]的低8位和tmp的低16位,但由于array[1]本来就是8位,而tmp虽然是32位,但高16位都为0,所以将它们注释掉也不影响结果,写成:tmp = (short)((array[0]<< 8)|array[1]),并将tmp = tmp & 0xFFFF; 注释掉。试试就知道了。
array[0]: 0000 0001 表示高8位
array[1]: 0000 0100 表示低8位
然后操作是这样的: 0000 0001 0000 0000
0000 0000 0000 0100
----------------------
0000 0001 0000 0100
=260 至于这一句:tmp = tmp & 0xFFFF;
就是取数据的低16位... 真的有人用java搞这么底层的开发吗?
oX表示的是16进制.
0xFFFF 其实就是二制的16个1;
同理:oxFF 就8个1
0xffff 对应 [0,65535]
程序是做什么用的