decdecode.c
Author: cmaier@cmassoc.net

    /*====================================================================*
     *
     *   size_t decdecode (void const * memory, size_t extent,  char buffer [], size_t length);
     *
     *   memory.h
     *
     *   decode a memory block of given length in bytes as a string of
     *   separated hexadecimal bytes; terminate once the string fills
     *   or the memory ends; terminate the string and return the actual
     *   string bytes;
     *
     *   allow three string characters for each memory byte; this means
     *   that the buffer must have at least three characters or nothing
     *   will be decoded; the maximum number of bytes is the lesser of
     *   chars/3 and bytes;;
     *
     *   Motley Tools by Charles Maier <cmaier@cmassoc.net>;
     *   Copyright (c) 2001-2006 by Charles Maier Associates;
     *   Licensed under the Internet Software Consortium License;
     *
     *--------------------------------------------------------------------*/

    #ifndef DECDECODE_SOURCE
    #define DECDECODE_SOURCE

    #include "../tools/memory.h"
    #include "../tools/number.h"

    size_t decdecode (void const * memory, register size_t extent, char buffer [], register size_t length)

    {
    	register char * string = (char *)(buffer);
    	register byte * offset = (byte *)(memory);
    	if (length)
    	{
    		length /= DEC_DIGITS + 1;
    		while ((length--) && (extent--))
    		{
    			unsigned octet = *offset;
    			unsigned digit = DEC_DIGITS;
    			while (digit--)
    			{
    				string [digit] = '0' + octet % RADIX_DEC;
    				octet /= RADIX_DEC;
    			}
    			string += DEC_DIGITS;
    			if ((length) && (extent))
    			{
    				*string++ = DEC_EXTENDER;
    			}
    			offset++;
    		}
    		*string = (char) (0);
    	}
    	return (string - buffer);
    }

    #endif

[PREV] [HOME] [NEXT]