4.4. Turning ASCII Hex Keys (or Other ASCII Hex Data) into Binary
Problem
You have a key represented in ASCII
that you’d like to convert into binary form. The
string containing the key is NULL-terminated.
Solution
The code listed in the following
Section 4.4.3 parses an
ASCII string that represents hexadecimal data, and it returns a
malloc( )‘d buffer of the
appropriate length. Note that the buffer will be half the size of the
input string, not counting the leading
“0x” if it exists. The exception is
when there is whitespace. This function passes back the number of
bytes written in its second parameter. If that parameter is negative,
an error occurred.
Discussion
The spc_hex2bin( )
function shown in this section converts an
ASCII string into a binary string. Spaces and tabs are ignored. A
leading “0x” or
“0X” is ignored. There are two
cases in which this function can fail. First, if it sees a
non-hexadecimal digit, it assumes that the string is not in the right
format, and it returns NULL, setting the error
parameter to ERR_NOT_HEX. Second, if there is an
odd number of hex digits in the string, it returns
NULL, setting the error parameter to
ERR_BAD_SIZE.
#include <string.h> #include <stdlib.h> #include <ctype.h> #define ERR_NOT_HEX -1 #define ERR_BAD_SIZE -2 #define ERR_NO_MEM -3 unsigned char *spc_hex2bin(const unsigned char *input, size_t *l) { unsigned char shift = 4, value = 0; unsigned char *r, *ret; const unsigned char *p; if (!(r = ret = (unsigned char *)malloc(strlen(input) ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access