大侠留步,希望能帮助我解决此问题,以下是我的代码: public static String getHexString(byte[] b) {
String str = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
str = str + hex;
}
return str.toUpperCase();
}就是一个转码的方法,没什么错误,但奇怪的是在windows和Linux下竟然会有不同的结果,真的不明白为什么。
路过的大虾们希望能施一下援手^_^

解决方案 »

  1.   

    这段代码写得不好,参考一下下面的代码:public class ByteUtil {    private final static char[] HEX = "0123456789abcdef".toCharArray();    /**
         * 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示
         *
         * @param bys       需要转换成 16 进制的字节数组
         * @return
         */
        public static String bytes2Hex(byte[] bys) {
            if(bys == null) {
                return null;
            }
            char[] chs = new char[bys.length * 2];
            for(int i = 0, offset = 0; i < bys.length; i++) {
                chs[offset++] = HEX[bys[i] >> 4 & 0xf];
                chs[offset++] = HEX[bys[i] & 0xf];
            }
            return new String(chs);
        }
    }
      

  2.   

    结果怎么个不同?
    String.format估计更简单
    StringBuilder sb = new StringBuilder();
    for (byte bb : b) {
        sb.append(String.format("%02X", bb));
    }
    String s = sb.toString();
      

  3.   

    多谢各位了,问题解决了,是中文传递到Linux后出现了乱码,在乱码的基础上再进行转码,所以才出错