diff --git a/src/main/java/com/reandroid/arsc/util/HexBytesWriter.java b/src/main/java/com/reandroid/arsc/util/HexBytesWriter.java index 7aff2aa..646fee1 100644 --- a/src/main/java/com/reandroid/arsc/util/HexBytesWriter.java +++ b/src/main/java/com/reandroid/arsc/util/HexBytesWriter.java @@ -26,6 +26,10 @@ public class HexBytesWriter { private final int indent; private boolean mAppendString = true; private String mEncoding; + private int lineNumber; + private boolean showLineNumber; + private boolean decimalLineNumber; + private String lineNumberFormat; public HexBytesWriter(byte[] byteArray, int width, int columns, int indent){ this.byteArray = byteArray; this.width = (width <= 0) ? DEFAULT_WIDTH : width; @@ -39,6 +43,12 @@ public class HexBytesWriter { this(byteArray, DEFAULT_WIDTH, DEFAULT_COLUMNS, DEFAULT_INDENT); } + public void setShowLineNumber(boolean showLineNumber) { + this.showLineNumber = showLineNumber; + } + public void setDecimalLineNumber(boolean decimalLineNumber) { + this.decimalLineNumber = decimalLineNumber; + } public void setAppendString(boolean appendString) { this.mAppendString = appendString; } @@ -66,6 +76,7 @@ public class HexBytesWriter { if(byteArray==null){ return; } + initLineNumber(byteArray.length); int width = this.width; int columns = this.columns; int x = 0; @@ -78,6 +89,7 @@ public class HexBytesWriter { newLineAppended=true; } writeIndent(writer); + writeLineNumber(writer); x=0; }else if(x%columns==0){ writer.write(' '); @@ -89,7 +101,7 @@ public class HexBytesWriter { newLineAppended=false; writeHex(writer, byteArray[offset+i]); } - if(x>1){ + if(x>0){ writeString(writer,x , length); } } @@ -121,13 +133,16 @@ public class HexBytesWriter { private void fillLastRow(Writer writer, int position) throws IOException { int rem = width - position % width; for(int i=0; ibase){ + digits++; + max=max/base; + } + lineNumberFormat = "%0"+digits+(decimalLineNumber?"d":"x"); + } private void writeNewLine(Writer writer) throws IOException { writer.write('\n'); } + public static String printHex(byte[] byteArray){ + return toHex(byteArray, false, false); + } public static String toHex(byte[] byteArray){ + if(byteArray==null){ + return "null"; + } + return toHex(byteArray, byteArray.length>64); + } + public static String toHex(byte[] byteArray, boolean showLineNumber){ + return toHex(byteArray, showLineNumber, true); + } + public static String toHex(byte[] byteArray, boolean showLineNumber, boolean appendString){ + if(byteArray==null){ + return "null"; + } StringWriter writer=new StringWriter(); HexBytesWriter hexBytesWriter = new HexBytesWriter(byteArray); + hexBytesWriter.setShowLineNumber(showLineNumber); + hexBytesWriter.setAppendString(appendString); try { hexBytesWriter.write(writer); writer.flush();