Javaでファイルを16進数に変換する方法
String formatter(“%02X “)を使用してFile into Hex値を変換する方法を示す単純なJavaプログラム。 The attached comments should be self-explanatory.
例
package com.example; 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")); } }
Demo
ダミーコンテンツを含むファイル
ABCDEFG 12345678 !@#$%^&*() Testing only
上記のクラスによって処理された後、次の16進値が表示されます。
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