33 void build_hex_line(
const uint8* buffer,
size_t length,
size_t offset,
char* ret,
unsigned int padding )
35 ret +=
snprintf( ret, length,
"%0*zX:", padding, offset );
39 for(
size_t i = 0; i < 16; i++ )
43 ret +=
snprintf( ret, length,
" -" );
46 if( ( i + offset ) < length )
48 uint8 c = *(
const uint8*)( buffer + offset + i );
50 ret +=
snprintf( ret, length,
" %02X", c );
51 printable[i] = (
IsPrintable( c ) ? (char)c :
'.' );
60 snprintf( ret, length,
" | %.16s", printable );
67 for(
uint32 offset = 0; offset < length; offset += 16 )
71 fprintf( into,
"%s%s\n", pfx, buffer );
79 for(
uint32 offset = 0; offset < length; offset += 16 )
83 _log( type,
"%s%s", pfx, buffer );
94 fprintf( into,
"%s ... truncated ...\n", pfx );
97 fprintf( into,
"%s%s\n", pfx, buffer );
110 _log( type,
"%s ... truncated ...", pfx );
113 _log( type,
"%s%s", pfx, buffer );
#define _log(type, fmt,...)
const uint32 HEX_DUMP_PREVIEW_LIMIT
void build_hex_line(const uint8 *buffer, size_t length, size_t offset, char *ret, unsigned int padding)
Build a printable line suitable for hex dump.
void pfxHexDump(const char *pfx, FILE *into, const uint8 *data, size_t length)
bool IsPrintable(const PyString *str)
Checks whether string is printable.
void pfxHexDumpPreview(const char *pfx, FILE *into, const uint8 *data, size_t length)