图片和16进制 互相转换

/**
* 图片转十六进制
/
public static class ImageToHex {
public static void main(String[] args) throws Exception {
try {
StringBuffer sb = new StringBuffer();
FileInputStream fis = new FileInputStream(“C:\Users\wb-wsj429645\Desktop\RZE.jpg”);
BufferedInputStream bis = new BufferedInputStream(fis);
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = fis.read(buff)) != -1) {
bos.write(buff, 0, len);
}
// 得到图片的字节数组
byte[] result = bos.toByteArray();
System.out.println("++++" + byte2HexStr(result));
// 字节数组转成十六进制
String str = byte2HexStr(result);
/

* 将十六进制串保存到txt文件中
*/
PrintWriter pw = new PrintWriter(
new FileWriter(“C:\Users\wb-wsj429645\Desktop\RZE.txt”));
pw.println(str);
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}

    /**
     * 实现字节数组向十六进制的转换方法一
     *
     * @param b
     * @return
     */
    public static String byte2HexStr(byte[] b) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = (Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1)
                hs = hs + "0" + stmp;
            else
                hs = hs + stmp;
        }
        return hs.toUpperCase();
    }
}

===================================================================

/**

  • 十六进制转图片
    */
    class Hex2Image {
    public static void main(String[] args) throws Exception {
    Hex2Image to = new Hex2Image();
    InputStream is = new FileInputStream(“C:\Users\wb-wsj429645\Desktop\RZE.txt”);
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String str = null;
    StringBuilder sb = new StringBuilder();
    while ((str = br.readLine()) != null) {
    System.out.println(str);
    sb.append(str);
    }
    to.saveToImgFile(sb.toString().toUpperCase(), “C:\Users\wb-wsj429645\Desktop\qqq.jpg”);
    }

    public void saveToImgFile(String src, String output) {
    if (src == null || src.length() == 0) {
    return;
    }
    try {
    FileOutputStream out = new FileOutputStream(new File(output));
    byte[] bytes = src.getBytes();
    for (int i = 0; i < bytes.length; i += 2) {
    out.write(charToInt(bytes[i]) * 16 + charToInt(bytes[i + 1]));
    }
    out.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    private int charToInt(byte ch) {
    int val = 0;
    if (ch >= 0x30 && ch <= 0x39) {
    val = ch - 0x30;
    } else if (ch >= 0x41 && ch <= 0x46) {
    val = ch - 0x41 + 10;
    }
    return val;
    }
    }

你可能感兴趣的:(图片和16进制 互相转换)