Javaでファイルを16進数に変換する方法
例
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
上記のクラスで処理された後、次のHex値が表示されます:
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
リファレンス
リンク://タグ/ファイル/[ファイル]リンク://タグ/16進数/[16進]リンク://タグ/io/[io]リンク://タグ/java/[java]