Hallo,
ich versuche gerade eine binäre Datei einzulesen und einen Hex-Dump zu erzeugen. Neben dem Hexdump von 16 Bytes soll dann der Inhalt der Datei als Text angezeigt werden.
Das funktioniert auch soweit so gut.
Auszug
Leider werden dort auch Zeilenumbrüche eingefügt und so weiter.
Eigentlich will ich jedes nicht druckbare Zeichen durch einen "." ersetzen. Wie finde ich aber heraus, welches Zeichen nicht druckbar ist?
Gibt es da eine Klasse?
ich versuche gerade eine binäre Datei einzulesen und einen Hex-Dump zu erzeugen. Neben dem Hexdump von 16 Bytes soll dann der Inhalt der Datei als Text angezeigt werden.
Das funktioniert auch soweit so gut.
Auszug
00000000: 696d706f 7274206a 6176612e 696f2e2a import java.io.*
00000010: 3b0a696d 706f7274 206a6176 612e7574 ;
import java.ut
00000020: 696c2e2a 3b0a696d 706f7274 206a6176 il.*;
import jav
00000030: 612e7371 6c2e5469 6d657374 616d703b a.sql.Timestamp;
00000040: 0a0a7075 626c6963 20636c61 73732065
public class e
Leider werden dort auch Zeilenumbrüche eingefügt und so weiter.
Eigentlich will ich jedes nicht druckbare Zeichen durch einen "." ersetzen. Wie finde ich aber heraus, welches Zeichen nicht druckbar ist?
Gibt es da eine Klasse?
Code:
import java.io.*;
import java.util.*;
import java.sql.Timestamp;
public class example2 {
static FileInputStream myFIS = null;
static FileOutputStream myFOS = null;
static PrintStream myPOS = null;
static public void main(String[] args) {
PrintStream e = System.err;
try {
myPOS = new PrintStream ( args[0]+".hex" );
long now = new Date().getTime();
myPOS.printf( "Hex dump of file %s %s %n", args[0], new Timestamp(now) );
myFIS = new FileInputStream( args[0] );
while ( myFIS.available() > 0 )
dump( (byte)myFIS.read() );
} catch (IOException x) {
e.println( "Exception: " + x.getMessage() );
}
}
static private long byteCount = 0;
static private String byteString = "";
static private Character actChar = null;
static private void dump(byte b) {
if ( byteCount % 16 == 0 ) {
myPOS.print( " " + byteString );
byteString = "";
myPOS.printf( "%n%08x:", byteCount );
}
// output a space every 4 bytes
if ( byteCount++ % 4 == 0 )
myPOS.print(" ");
// dump the byte as 2 hex chars
myPOS.printf( "%02x", b );
actChar = new Character( (char) b);
// try to eleminate non-printable ASCII-output
if ( Character.isISOControl(actChar) )
actChar = new Character('.');
// save the char in the String
byteString += new Character( (char) b ).toString();
}
}