• C

Hex to Ascii/Integer

(C on Solaris 2.x)
Hi,
I'm having problems on how to store some Hex values.
Hopefully you can help this newbie in C.

First of all, here're 2 simple variables I'm having ...

      unsigned char *source, *dest;

After I read in a string e.g. "12AB" into source, I convert the string into Hex and put the output into dest :

        < ..read string "12AB" from file into source ...>          
          AsciiToHex(source, strlen(source), dest);
          dest[2]='\0';

Now the problem is I need to store the decimal value of hex '12' (which is 1x16 + 2 = 18) and similarly that of 'AB' (which is 10x16+11=171) into 2 separate ascii strings :

           unsigned char *var1, *var2;

so that var1 contains "18" and var2 has "171" in ascii.

How do I do that ?

Thanks for helping !!!!!
totoro030898Asked:
Who is Participating?
 
alexoConnect With a Mentor Commented:
#include <string.h>

unsigned char xlate(char ch)
{
    if (ch >= '0' && ch <= '9')
        return ch - '0';
    else if (ch >= 'A' && ch <= 'F')
        return ch - 'A' + 10;
    else if (ch >= 'a' && ch <= 'f')
        return ch - 'a' + 10;
    else /* Error */
        return 0;
}

void AsciiToHex(char* src, int len, char* dest)
{
    if (len & 1) /* Odd length */
    {
        *dest++ = xlate(*src++);
        len--;
    }

    while (len)
    {
        *dest++ = xlate(*src++) * 16 + xlate(*src++);
        len -= 2;
    }

    *dest = '\0';
}

void main()
{
    char from[] = "12A";
    char to[3];

    AsciiToHex(from, strlen(from), to);
}

0
 
totoro030898Author Commented:
Edited text of question
0
 
ozoCommented:
Where do you allocate storage fot *dest?

unsigned char *source, *dest;
unsigned char *var1, *var2;
source=strdup("12AB");
dest=malloc((strlen(source)+3)/2);
AsciiToHex(source, strlen(source), dest);
var1=malloc(4);
var2=malloc(4);
sprintf(var1,"%d",dest[0]);
sprintf(var2,"%d",dest[1]);
0
 
totoro030898Author Commented:
As a newbie to C, personally think that ozo's answer is short and simpler. however still thanks to alexo! i did learn something!
0
 
alexoCommented:
I gave you an implementation of AsciiToHex(), ozo gave you a way to use one.  Two different things.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.