byte转16进制时&0xFF作用

//先看Java String转16进制代码:

String str = "我是中国人";
byte[] bytes2 = str.getBytes("utf-8");
StringBuffer sb = new StringBuffer();
for(int i = 0; i < bytes2.length;++i) {
	int v = bytes2[i] & 0xFF;
	//System.out.println(Integer.toHexString(bytes2[i]) + "\n" + Integer.toHexString(v));
	sb.append(Integer.toHexString(v).toUpperCase());
}
String hexStr = sb.toString();

        /**
		 * & 0xFF作用:
		 * 1.0xFF的二进制1111,1111 32位计算机里表示0000,0000,0000,0000,0000,0000,1111,1111
		 * 2.Integer.toHexString(int)参数是int类型,如果byte输入参数会将高位24位也看做有效位
		 * 3.做&运算相当于  例如 -127 & 0xFF
		 *   11111111 11111111 11111111 10000001	//-127
		 * 	&00000000 00000000 00000000 11111111	//0xFF
		 * ----------------------------------------
		 *   00000000 00000000 00000000 10000001	//129 转换成16进制=81
		 * 4.如果不做与运算11111111 11111111 11111111 10000001(-127)会变成ffffff81
		 * 	 前面的6个f是无效的
		 * 5.总结一句话就是:byte & 0xFF 是为了只保留后面的8位有效位
		 * 	
		 * ps:1.如果要保留16位有效位就&0xFFFF;2.因为java里面没有无符号类型
		 * 
		 */

 

你可能感兴趣的:(byte转16进制时&0xFF作用)