byte[]跟String之间转换出现比较有趣的有关问题

byte[]跟String之间转换出现比较有趣的问题
本帖最后由 szuzsq 于 2013-06-17 18:41:22 编辑

public static String uint2buf(int ui) {
ui = 869015016; //0x33CC1DE8
byte[] bytes = new byte[4];

for (int i = 0; i < 4; i++) {
bytes[i] = (byte)(ui & 0xFF);
if (i < 3)
ui = ui >> 8;
}

//bytes == {0xE8, 0x1D, 0xCC, 0x33}
//取出来的bytes值是没有错的

String rs = new String(bytes, 0, 4);
byte[] buf = rs.getBytes();

//buf == {0xEF, 0xBF, 0xBD, 0x1D, 0xEF, 0xBF, 0xBD, 0x33}
//重新再取出来之后, 为什么bytes跟buf这2个数组里的内容不一样?

String rs2 = new String(buf, 0, buf.length);
boolean b = rs.equals(rs2);

//使用不同的byte[]生成的String
//这里竟然b == true!!!!!!!!!!!!
if(b)
return rs;
return rs2;
}

------解决方案--------------------
这个是和编码方式有关的 uft编码方式
会把你hard的4个byte 编码