Skip to content

Instantly share code, notes, and snippets.

@timyates
Last active December 30, 2015 00:19
Show Gist options
  • Save timyates/7748912 to your computer and use it in GitHub Desktop.
Save timyates/7748912 to your computer and use it in GitHub Desktop.
Hexdump byte[] in Groovy via the metaClass
byte[].metaClass.hexdump { int idx, int len ->
println ''' +--------------------------------------------------+
| | 0 1 2 3 4 5 6 7 8 9 a b c d e f |
| +----------+--------------------------------------------------+------------------+'''.stripMargin()
delegate[ idx..<(idx+len) ].with { bfr ->
def bytes = bfr.collect { String.format( '%02x', it ) }
.collate( 8 )
.collate( 2 )
.collect { a, b -> ( a + [ '' ] + b ).join( ' ' ).padRight( 48, ' ' ) }
def ascii = bfr.collect { it > 0x1f && it < 0x7f ? (char)it : '.' }
.collate( 16 )
.collect { it.join().padRight( 16, ' ' ) }
int offs = idx
[bytes,ascii].transpose().each { b, a ->
println " | ${String.format( '%08x', offs )} | ${b} | ${a} |"
offs += 16
}
}
println ' +----------+--------------------------------------------------+------------------+'
}
byte[].metaClass.hexdump { int idx ->
delegate.hexdump( idx, delegate.length - idx )
}
byte[].metaClass.hexdump { ->
delegate.hexdump( 0, delegate.length )
}
(1..250 as byte[]).hexdump()
(1..250 as byte[]).hexdump( 30 )
(1..250 as byte[]).hexdump( 30, 42 )
+--------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+----------+--------------------------------------------------+------------------+
| 00000000 | 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 | ................ |
| 00000010 | 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 | ............... |
| 00000020 | 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 | !"#$%&'()*+,-./0 |
| 00000030 | 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 | 123456789:;<=>?@ |
| 00000040 | 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 | ABCDEFGHIJKLMNOP |
| 00000050 | 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 | QRSTUVWXYZ[\]^_` |
| 00000060 | 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 | abcdefghijklmnop |
| 00000070 | 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 | qrstuvwxyz{|}~.. |
| 00000080 | 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 | ................ |
| 00000090 | 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 | ................ |
| 000000a0 | a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 | ................ |
| 000000b0 | b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 | ................ |
| 000000c0 | c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 | ................ |
| 000000d0 | d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 | ................ |
| 000000e0 | e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 | ................ |
| 000000f0 | f1 f2 f3 f4 f5 f6 f7 f8 f9 fa | .......... |
+----------+--------------------------------------------------+------------------+
+--------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+----------+--------------------------------------------------+------------------+
| 0000001e | 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e | . !"#$%&'()*+,-. |
| 0000002e | 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e | /0123456789:;<=> |
| 0000003e | 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e | ?@ABCDEFGHIJKLMN |
| 0000004e | 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e | OPQRSTUVWXYZ[\]^ |
| 0000005e | 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e | _`abcdefghijklmn |
| 0000006e | 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e | opqrstuvwxyz{|}~ |
| 0000007e | 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e | ................ |
| 0000008e | 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e | ................ |
| 0000009e | 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae | ................ |
| 000000ae | af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be | ................ |
| 000000be | bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce | ................ |
| 000000ce | cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de | ................ |
| 000000de | df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee | ................ |
| 000000ee | ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa | ............ |
+----------+--------------------------------------------------+------------------+
+--------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+----------+--------------------------------------------------+------------------+
| 0000001e | 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e | . !"#$%&'()*+,-. |
| 0000002e | 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e | /0123456789:;<=> |
| 0000003e | 3f 40 41 42 43 44 45 46 47 48 | ?@ABCDEFGH |
+----------+--------------------------------------------------+------------------+
@timyates
Copy link
Author

timyates commented Dec 2, 2013

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment