Changeset 3515:9570578e59c2 in roaraudio for libroarpulse


Ignore:
Timestamp:
02/16/10 00:59:21 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

implemented pa_hexstr() and pa_parsehex()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroarpulse/util.c

    r3489 r3515  
    103103} 
    104104 
     105/* Format the specified data as a hexademical string */ 
     106char *pa_hexstr(const uint8_t* d, size_t dlength, char *s, size_t slength) { 
     107 const char table[] = "0123456789abcdef"; 
     108 char * p = s; 
     109 size_t i; 
     110 
     111 for (i = 0; i < dlength && slength > 2; i++, slength -= 2, d++) { 
     112  *(p++) = table[*d >>    4]; 
     113  *(p++) = table[*d &  0x0F]; 
     114 } 
     115 
     116 *p = 0; 
     117 
     118 return s; 
     119} 
     120 
     121/* Parse a hexadecimal string as created by pa_hexstr() to a BLOB */ 
     122size_t pa_parsehex(const char *p, uint8_t *d, size_t dlength) { 
     123 size_t have = 0; 
     124 register int low_nibble = 0; 
     125 register char c; 
     126 
     127 if ( dlength == 0 ) 
     128  return 0; 
     129 
     130 for (; (c = *p); p++) { 
     131  if ( c >= '0' && c <= '9' ) { 
     132   c -= '0'; 
     133  } else if ( c >= 'a' && c <= 'f' ) { 
     134   c -= 'a' - 10; 
     135  } else if ( c >= 'A' && c <= 'F' ) { 
     136   c -= 'A' - 10; 
     137  } else { 
     138   return (size_t)-1; 
     139  } 
     140 
     141  if ( low_nibble ) { 
     142   *d |= c & 0x0F; 
     143   low_nibble = 0; 
     144 
     145   d++; 
     146   have++; 
     147   dlength--; 
     148 
     149   if ( dlength == 0 ) 
     150    return have; 
     151  } else { 
     152   *d = (c & 0x0F) << 4; 
     153   low_nibble = 1; 
     154  } 
     155 } 
     156 
     157 return have; 
     158} 
     159 
     160 
    105161//ll 
Note: See TracChangeset for help on using the changeset viewer.