- Switched to using
require_relative
to improve load-times. - Correctly alias
:long
/:ulong
to:int32
/:uint32
. - Disable ANSI styling in {Hexdump#hexdump} if the output is not a TTY.
- Removed the old
hexdump/extensions
file in favor ofhexdump/core_ext
.
- Added the ability to hexdump typed data. Available
type:
s are ::char
- signed 8bit ASCII character:uchar
- unsigned 8bit ASCII character:int8
- signed 8bit integer:uin8
/:byte
- unsigned 8bit integer (default):int16
/:short
- signed 16bit integer:int16_le
/:short_le
- signed 16bit integer (little endian):int16_be
/:short_be
- signed 16bit integer (big endian):int16_ne
/:short_ne
- signed 16bit integer (network endian):uint16
/:ushort
- unsigned 16bit integer:uint16_le
/:ushort_le
- unsigned 16bit integer (little endian):uint16_be
/:ushort_be
- unsigned 16bit integer (big endian):uint16_ne
/:ushort_ne
- unsigned 16bit integer (network endian):int32
/:int
/:long
- signed 32bit integer:int32_le
/:int_le
/:long_le
- signed 32bit integer (little endian):int32_be
/:int_be
/:long_be
- signed 32bit integer (big endian):int32_ne
/:int_ne
/:long_ne
- signed 32bit integer (network endian):uint32
/:uint
/:ulong
- unsigned 32bit integer:uint32_le
/:uint_le
/:ulong_le
- unsigned 32bit integer (little endian):uint32_be
/:uint_be
/:ulong_be
- unsigned 32bit integer (big endian):uint32_ne
/:uint_ne
/:ulong_ne
- unsigned 32bit integer (network endian):int64
/:long_long
- signed 64bit integer:int64_le
/:long_long_le
- signed 64bit integer (little endian):int64_be
/:long_long_be
- signed 64bit integer (big endian):int64_ne
/:long_long_ne
- signed 64bit integer (network endian):uint64
/:ulong_long
- unsigned 64bit integer:uint64_le
/:ulong_long_le
- unsigned 64bit integer (little endian):uint64_be
/:ulong_long_be
- unsigned 64bit integer (big endian):uint64_ne
/ulong_long_ne
- unsigned 64bit integer (network endian):float
- single precision 32bit floating-point number:float_le
- single precision 32bit floating-point number (little endian):float_be
- single precision 32bit floating-point number (big endian):float_ne
- single precision 32bit floating-point number (network endian):double
- double precision 64bit floating-point number:double_le
- double precision 64bit floating-point number (little endian):double_be
- double precision 64bit floating-point number (big endian):double_ne
- double precision 64bit floating-point number (network endian)
- Added support for optionally skipping N bytes or reading at most N bytes of
data (ex:
offset: 10
andlength: 100
). - Added support for optional zero-padding of the data so it aligns with the type
size (ex:
zero_pad: true
). - Added support for displaying the index in a separate numeric base than the
numeric columns (ex:
index_base: 10, base: 2
). Defaults to base 16. - Added support for omitting repeating rows with a
*
(ex:repeating: true
orrepeating: false
to disable). - Added support for grouping columns together like GNU
hexdump -C
(ex:group_columns: 4
). - Added support for grouping characters together (ex:
group_chars: 4
). - Added support for grouping characters together to align with the type's size
(ex:
group_chars: :type
). - Added support for displaying UTF-8 characters or other character encodings.
- Added support for disabling the characters column entirely
(ex:
chars_column: false
). - Added support for ANSI styling and highlighting (ex:
style: {...}
andhighlights: {...}
). - Added {Hexdump::ModuleMethods} to provide a top-level
{Hexdump::ModuleMethods#hexdump hexdump} method.
- Include {Hexdump::ModuleMethods} into {Kernel} by default.
- Added preliminary truffleruby support.
- Only issue was oracle/truffleruby#2426
hexdump
methods now accept a block for configuring the hexdump instance.- Renamed
Hexdump::Dumper
to {Hexdump::Hexdump}. - Renamed the
:width
option to:columns
.
- Require Ruby >= 2.0.0.
- Added support for Ruby 3.0.
- {Hexdump.dump}, {Hexdump#dump}, and
Hexdump::Dumper#initialize
now accept keyword arguments. Hexdump::Dumper#each
now returns the total number of bytes read.Hexdump::Dumper#dump
now prints the final number of bytes read on the last line.- Micro-optimizations to improve performance on JRuby and TruffleRuby.
- Default the
:output
option of {Hexdump.dump} to$stdout
instead ofSTDOUT
, to support overriding the default stdout stream (@kylekyle).
- Fixed a typo in the gemspec, which incorrectly set
required_rubygems_version
to the same value asrequired_ruby_version
.
- Added {Hexdump::VERSION}.
- Rescue
RangeError
s inHexdump::Dumper#format_printable
. - Fixed a typo in
benchmarks/hexdump.rb
(thanks ColMcp). - Fixed a typo in Source URL, in the README (thanks Lawrence Woodman).
- Documented the
:endian
option for {Hexdump.dump}. - Replaced ore-tasks with rubygems-tasks.
- Fixed a major bug in
Hexdump::Dumper#dump
, where the line buffers were not being cleared.
- Added
Hexdump::Dumper
. - Added support for hexdumping 1, 2, 4, 8 byte words.
- Added support for hexdumping Little and Big Endian words.
- Optimized the hexdump algorithm to not use Arrays, use a lookup table of printable characters and cache formatted numbers.
- Opted into test.rubygems.org.
- Initial release:
- Can hexdump any Object supporting the
each_byte
method. - Can send the hexdump output to any Object supporting the
<<
method. - Can yield each line of hexdump, instead of printing the output.
- Supports printing hexadecimal, decimal, octal and binary bytes.
- Makes {String}, {StringIO}, {IO}, {File} objects hexdumpable.
- Fast-ish.
- Can hexdump any Object supporting the