• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

java实现十六进制数据与图片的互相转换

JAVA相关 水墨上仙 1928次浏览

java实现十六进制数据与图片的互相转换
转自:http://blog.csdn.net/jianhua0902/article/details/8487031

1&nbsp十六进制转图片jpg

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Map;
/**
 * 十六进制转成图片
 * @author Administrator
 *
 */
public class Hex2Image {
	public static void main(String[] args) throws Exception {
		Hex2Image to=new Hex2Image();
		InputStream is=new FileInputStream("f://aa.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(),"f://dd.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;
	   }
}

2&nbsp图片转成16进制

import java.io.BufferedInputStream;  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.PrintWriter;  
  
/** 
 * 图片转成十六进制 
 * @author Administrator 
 * 
 */  
public class ImageToHex {  
    public static void main(String[] args) throws Exception {  
      
    try{   
        StringBuffer sb = new StringBuffer();   
        FileInputStream fis = new FileInputStream("f:/345.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("f://today.txt"));     
           pw.println(str);     
           pw.close();  
        }catch(IOException e){   
        }   
      
}  
    /* 
     *  实现字节数组向十六进制的转换方法一 
     */  
    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();  
    }  
      
    private static byte uniteBytes(String src0, String src1) {  
        byte b0 = Byte.decode("0x" + src0).byteValue();  
        b0 = (byte) (b0 << 4);  
        byte b1 = Byte.decode("0x" + src1).byteValue();  
        byte ret = (byte) (b0 | b1);  
        return ret;  
    }  
    /* 
     *实现字节数组向十六进制的转换的方法二 
     */  
    public static String bytesToHexString(byte[] src){  
  
        StringBuilder stringBuilder = new StringBuilder("");  
        if (src == null || src.length <= 0) {  
            return null;  
        }  
        for (int i = 0; i < src.length; i++) {  
            int v = src[i] & 0xFF;  
            String hv = Integer.toHexString(v);  
            if (hv.length() < 2) {  
                stringBuilder.append(0);  
            }  
            stringBuilder.append(hv);  
        }  
        return stringBuilder.toString();  
  
    }  
  
  
  
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明java实现十六进制数据与图片的互相转换
喜欢 (0)
加载中……