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

本文详细介绍了如何使用Java将十六进制数据转换为图片(jpg格式),以及如何将图片转换为十六进制表示。通过这两个过程,可以方便地在十六进制和图像数据之间进行操作。

1 十六进制转图片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 图片转成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();

    }



}


 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值