欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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

最编程 2024-05-04 22:28:52
...
武汉源创会回归,4月20聊聊大模型”

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();

    }



}


推荐阅读