./ MultiCS.r82 / convert.c
// Last Modification: 03-06-2009
#include <stdio.h>

#include "convert.h"

///////////////////////////////////////////////////////////////////////////////
void bin8(unsigned char n, char *s)
{
  int i;
  for ( i=7; i>=0; i-- )
  {
    *s = '0' + ( (n >> i)& 1 );
    s++;
  }
  *s='\0';
}

///////////////////////////////////////////////////////////////////////////////
void bin16(unsigned short n, char *s)
{
  int i;
  for ( i=15; i>=0; i-- )
  {
    *s = '0' + ( (n >> i)& 1 );
    s++;
  }
  *s='\0';
}

///////////////////////////////////////////////////////////////////////////////
void bin32(unsigned short n, char *s)
{
  int i;
  for ( i=31; i>=0; i-- )
  {
    *s = '0' + ( (n >> i)& 1 );
    s++;
  }
  *s='\0';
}

///////////////////////////////////////////////////////////////////////////////
void array2bin( char *src, char *dest, int count )
{
  int i,j;
  char c;
  for ( i=0; i<count; i++)
  {
    c = *src;
    for ( j=7; j>=0; j-- )
    {
      *dest = '0' + ( (c >> j)& 1 );  // if ( (c >> j)&1 ) *dest = '1'; else *dest='0';
      dest++;
    }
    *dest=' '; dest++;
    src++;
  }
  *dest='\0';
}



///////////////////////////////////////////////////////////////////////////////
char hexchars[]="0123456789ABCDEF";
void hex8(int n, char *s)
{
  int i;
  for( i=4; i>=0; i-=4 ) 
  {
    *s = hexchars[ (n>>i) & 0x0F ];
    s++;
  }
  *s = '\0';
}

///////////////////////////////////////////////////////////////////////////////
void hex16(int n, char *s)
{
  int i;
  for( i=12; i>=0; i-=4 ) 
  {
    *s = hexchars[ (n>>i) & 0x0F ];
    s++;
  }
  *s = '\0';
}

///////////////////////////////////////////////////////////////////////////////
void hex32(int n, char *s)
{
	int i;
	for( i=28; i>=0; i-=4 ) {
		*s = hexchars[ (n>>i) & 0x0F ];
		s++;
	}
	*s = '\0';
}

///////////////////////////////////////////////////////////////////////////////
char *array2hex( unsigned char *src, char *dest, int count )
{
	int i;
	unsigned char c;
	for ( i=0; i<count; i++) {
		c = *src;
		*dest = hexchars[ (c>>4) & 0x0F ]; dest++;
		*dest = hexchars[ c & 0x0F ]; dest++;
		*dest = ' '; dest++;
		src++;
	}
	*dest='\0';
	return dest;
}


///////////////////////////////////////////////////////////////////////////////
int hexvalue(char src)
{
	int rt=0;
	if ( (src>='0')&&(src<='9') )  rt = (rt<<4) + (src-'0');
	else if ( (src>='a')&&(src<='f') ) rt = (rt<<4) + (src-'a')+10;
	else if ( (src>='A')&&(src<='F') ) rt = (rt<<4) + (src-'A')+10;
	else return -1;
	return rt;
}

///////////////////////////////////////////////////////////////////////////////
int hex2int(char *src)
{
 int rt=0;
 while (1)
 {
   if ( (*src>='0')&&(*src<='9') )  rt = (rt<<4) + (*src-'0');
   else if ( (*src>='a')&&(*src<='f') ) rt = (rt<<4) + (*src-'a')+10;
   else if ( (*src>='A')&&(*src<='F') ) rt = (rt<<4) + (*src-'A')+10;
   else break;
   src++;
 }
 return ( rt );
}

///////////////////////////////////////////////////////////////////////////////
int hex2array( char *src, unsigned char *dest)
{
  unsigned int rt=0;
  unsigned char c;
  int size=0;
  int chars=0;
  do
  {
    c=*src;
    if ( (c>='0')&&(c<='9') ) { rt = (rt<<4) + (c-'0'); chars++; }
    else if ( (c>='a')&&(c<='f') ) { rt = (rt<<4) + (c-'a')+10; chars++; }
    else if ( (c>='A')&&(c<='F') ) { rt = (rt<<4) + (c-'A')+10; chars++; }
    else if (chars>0) 
    {
      *dest = rt;
      dest++;
      size++;
      rt=0;
      chars=0;
    }
    if (chars==2)
    {
      *dest = rt;
      dest++;
      size++;
      rt=0;
      chars=0;
    }    
    src++;
  } while (c!='\0');
  return size;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////