Solved

# Hex to Ascii/Integer

Posted on 1998-05-20
1,454 Views
(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
Question by:totoro030898
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2
• 2

Author Comment

ID: 1250869
Edited text of question
0

LVL 84

Expert Comment

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

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

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

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

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

Why adding test code changes the build ? 11 136
C dll call freezes 5 116
Why  my code (program) build with old compiler? 11 145
MySQL recovery 7 57
Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
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 opening and reading files in the C programming language.
###### Suggested Courses
Course of the Month7 days, 22 hours left to enroll