Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 766|回复: 0

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

[复制链接]

该用户从未签到

发表于 2011-9-18 13:48:26 | 显示全部楼层 |阅读模式
1、十六进制转图片jpg

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;
import java.io.BufferedReader;

  
/**  
* 十六进制转成图片  
* @author Administrator  
*  
*/  
public class Hex2Image {   
    public static void main(String[] args) throws Exception {   
        Hex2Image to=new Hex2Image();   
        InputStream is=new FileInputStream("c:/work/today.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:/work/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)*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("c:/work/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("c:/work/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 & 0xFF;   
            String hv = Integer.toHexString(v);   
            if (hv.length() < 2) {   
                stringBuilder.append(0);   
            }   
            stringBuilder.append(hv);   
        }   
        return stringBuilder.toString();   
  
    }   
  
  }
  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 23:54 , Processed in 0.308095 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表