Solved

Hex to Ascii/Integer

Posted on 1998-05-20
5
1,445 Views
Last Modified: 2012-05-04
(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 !!!!!
0
Comment
Question by:totoro030898
  • 2
  • 2
5 Comments
 

Author Comment

by:totoro030898
ID: 1250869
Edited text of question
0
 
LVL 84

Expert Comment

by:ozo
ID: 1250870
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
 
LVL 11

Accepted Solution

by:
alexo earned 200 total points
ID: 1250871
#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
 

Author Comment

by:totoro030898
ID: 1250872
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
 
LVL 11

Expert Comment

by:alexo
ID: 1250873
I gave you an implementation of AsciiToHex(), ozo gave you a way to use one.  Two different things.
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now