NAME

Data::HexConverter - High performance hex string to binary converter

SYNOPSIS

use Data::HexConverter;
my $hex_ref = \"41424344";
my $binary  = Data::HexConverter::hex_to_binary($hex_ref);
# $binary now contains "ABCD"

DESCRIPTION

This module provides two functions, hex_to_binary and binary_to_hex.

hex_to_binary accepts a reference to a scalar containing an ASCII hexadecimal string and returns a binary string. It uses SSSE3 intrinsics to convert blocks of 32 characters at a time for maximum throughput. Remaining characters are handled via a lookup table. If the input contains an odd number of characters or an invalid hex digit, an exception is thrown.

binary_to_hex performs the reverse operation: it accepts a reference to a scalar containing arbitrary binary data and returns an uppercase hexadecimal representation. It uses SSSE3 vector instructions to expand 16 bytes at a time but will fall back to a scalar implementation and emit a warning if SSSE3 is not available.

VERSION

Version 0.02

FUNCTIONS

hex_to_binary

my $binary = Data::HexConverter::hex_to_binary(\$hex_string);

Converts the hexadecimal string pointed at by the reference into its binary form and returns it as a Perl scalar. The input scalar must only contain ASCII characters; if the scalar is flagged as UTF-8 it is downgraded to bytes using sv_utf8_downgrade[817665102442637-L378-L404]. An exception is thrown if the string cannot be downgraded or if it contains invalid characters.

binary_to_hex

my $hex = Data::HexConverter::binary_to_hex(\$binary_string);

Converts a binary string referenced by the argument into its uppercase hexadecimal representation and returns it as a Perl scalar. Each input byte becomes two hex characters. The input scalar is downgraded from UTF-8 if necessary. A warning is issued and a scalar implementation is used if the CPU lacks SSSE3 support. An exception is thrown if the argument is not a reference to a scalar.

AUTHOR

Jared Still

Assisted by ChatGPT.

LICENSE AND COPYRIGHT

This software is Copyright (c) 2025 by Jared Still.

This is free software, licensed under:

MIT License

1 POD Error

The following errors were encountered while parsing the POD:

Around line 95:

=cut found outside a pod block. Skipping to next block.