123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /*====================================================================*
- * Copyright (c) 2020 Qualcomm Technologies, Inc.
- * All Rights Reserved.
- * Confidential and Proprietary - Qualcomm Technologies, Inc.
- *====================================================================*/
- /*====================================================================*
- * Motley Tools by Charles Maier <cmaier@cmassoc.net>;
- * Copyright (c) 2001-2006 by Charles Maier Associates;
- * Licensed under the Internet Software Consortium License;
- *====================================================================*/
- /*====================================================================*
- *
- * char const * hex2IPv4 (char buffer [], size_t length, void const * memory, size_t extent);
- *
- * memory.h
- *
- * encode a character buffer with a decimal equivalent of hexadecimal character string
- * having decimals seperated by DEC_EXTENDER, defined in number.h;
- *
- *--------------------------------------------------------------------*/
- #ifndef HEX2IPv4_SOURCE
- #define HEX2IPv4_SOURCE
- #include <stdint.h>
- #include "../tools/memory.h"
- #include "../tools/number.h"
- #include "../nvm/nvm.h"
- unsigned digitcount(unsigned num)
- {
- unsigned dec, count;
- dec = num;
- count = 0;
- while(dec != 0)
- {
- dec = dec / RADIX_DEC;
- count++;
- }
- return count;
- }
- /*====================================================================*
- *
- * char * myitoa_nonulltermination (unsigned number, char buffer [], size_t length);
- *
- * non-standard version of itoa () with no null termination where
- * buffer is packed right-to-left to avoid reversing digits; ensure
- * buffer is longer than needed;
- *
- *--------------------------------------------------------------------*/
- char * myitoa_nonulltermination (unsigned number, char buffer [], size_t length)
- {
- do
- {
- buffer [-- length] = '0' + (number % 10);
- number /= 10;
- }
- while (number);
- return (buffer);
- }
- char const * hex2IPv4 (char buffer [], register size_t length, void const * memory, register size_t extent)
- {
- register char * string = (char *) (buffer);
- register byte * offset = (byte *) (memory);
- unsigned num, numlength;
-
- if (length)
- {
- length /= HEX_DIGITS + 1;
- while ((length--) && (extent--))
- {
- num = 0;
- num += (int)((* offset >> 0) & 0x0F);
- num += ((int)((* offset >> 4) & 0x0F)) * RADIX_HEX;
- numlength = digitcount(num);
- myitoa_nonulltermination(num, string, numlength);
- string += numlength;
- if ((length) && (extent))
- {
- * string++ = DEC_EXTENDER;
- }
- offset++;
- }
- * string = (char) (0);
- }
- return ((char *) (buffer));
- }
- #endif
|