java如何将文件转换到十六进制

一个简单的java程序来验证字符串格式化程序的使用(“% 02x”)将文件转换成十六进制值。

例子

package com.mkyong;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

public class File2Hex
{
    public static void convertToHex(PrintStream out, File file) throws IOException {
	InputStream is = new FileInputStream(file);
	 
	int bytesCounter =0;		
	int value = 0;
	StringBuilder sbHex = new StringBuilder();
	StringBuilder sbText = new StringBuilder();
	StringBuilder sbResult = new StringBuilder();
			
	while ((value = is.read()) != -1) {    
	    //convert to hex value with "X" formatter
            sbHex.append(String.format("%02X ", value));
	             
	    //If the chracater is not convertable, just print a dot symbol "." 
	    if (!Character.isISOControl(value)) {
	      	sbText.append((char)value);
	    }else {
	        sbText.append(".");
	    }
	            
	    //if 16 bytes are read, reset the counter, 
            //clear the StringBuilder for formatting purpose only.
	    if(bytesCounter==15){
	      	sbResult.append(sbHex).append("      ").append(sbText).append("\n");
	       	sbHex.setLength(0);
	        sbText.setLength(0);
	       	bytesCounter=0;
	    }else{
	        bytesCounter++;
	    }
       }
			
	//if still got content
	if(bytesCounter!=0){			
	     //add spaces more formatting purpose only
	    for(; bytesCounter<16; bytesCounter++){
		//1 character 3 spaces
		sbHex.append("   ");
	    }
	    sbResult.append(sbHex).append("      ").append(sbText).append("\n");
        }

        out.print(sbResult);
        is.close();
  }
	
   public static void main(String[] args) throws IOException
   {	
    	//display output to console
    	convertToHex(System.out, new File("c:/file.txt"));
    	
    	//write the output into a file
    	convertToHex(new PrintStream("c:/file.hex"), new File("c:/file.txt"));
    } 
}

演示

具有一些虚拟内容的文件

ABCDEFG
12345678
!@#$%^&*()
Testing only

经过上述处理后,将显示以下十六进制值:

41 42 43 44 45 46 47 0D 0A 31 32 33 34 35 36 37       ABCDEFG..1234567
38 0D 0A 21 40 23 24 25 5E 26 2A 28 29 0D 0A 54       8..!@#$%^&*()..T
65 73 74 69 6E 67 20 6F 6E 6C 79                      esting only

Reference     https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值