By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,506 Members | 1,881 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,506 IT Pros & Developers. It's quick & easy.

convert decimal number in a hexadecimal number ?

P: n/a
how to convert decimal number in a hexadecimal number using C?
Please help me.
Thanks.

Mar 16 '06 #1
Share this Question
Share on Google+
13 Replies


P: n/a
muss wrote:
how to convert decimal number in a hexadecimal number using C?
Please help me.
Thanks.

What have you tried?

--
Ian Collins.
Mar 16 '06 #2

P: n/a
CoL
This solves ur problem...

#include<stdio.h>

//function to convert a value to the desired base binary,oct,Hex
char* itoa(int val, int base){

static char buf[32] = {0};

int i = 30;

for(; val && i ; --i, val /= base)

buf[i] = "0123456789abcdef"[val % base]; //its a c way to
pick up that particular index value that is in [].

return &buf[i+1];
}
int main()
{

char c;
char* p,*q
p=itoa(8,8);
q=itoa(8,2);
printf("%s",p);
printf("%s",p);

}

muss wrote:
how to convert decimal number in a hexadecimal number using C?
Please help me.
Thanks.


Mar 16 '06 #3

P: n/a
On Thursday 16 March 2006 05:58, muss opined (in
<11**********************@v46g2000cwv.googlegroups .com>):
how to convert decimal number in a hexadecimal number using C?


Try `printf()`, it's described in your textbook. You did read it?

--
BR, Vladimir

Friction is a drag.

Mar 16 '06 #4

P: n/a
On Thursday 16 March 2006 07:48, CoL opined (in
<11**********************@i40g2000cwc.googlegroups .com>):
muss wrote:
how to convert decimal number in a hexadecimal number using C?
Please help me.
Thanks.
This solves ur problem...


No, it does not, as it doesn't work (even when all syntax errors are
corected).

Also, don't top-post (corrected here).
#include<stdio.h>

//function to convert a value to the desired base binary,oct,Hex
(Don't use `//` when posting to Usenet.)
char* itoa(int val, int base){
You never check that inputs are valid.
static char buf[32] = {0};
Are you sure 31 characters is enough for a 256-bit int on DS9K?
int i = 30;
a) Why 30?
b) Isn't it clearer to put initialisation into `for`?
for(; val && i ; --i, val /= base)

buf[i] = "0123456789abcdef"[val % base]; //its a c way to
pick up that particular index value that is in [].
Obfuscated C Contest is at <www.ioccc.org>.

return &buf[i+1];
}

int main()
It's:

int main(void)

Spell out what you mean.
{

char c;
char* p,*q ^
Syntax error: missing ';'.
p=itoa(8,8);
q=itoa(8,2);
printf("%s",p);
printf("%s",p);
You need '\n' at the end of `printf` for anything to be output. You also
never output string pointed to by `q`. Do you think it's guaranteed
that the same memory will be allocated to `buf` on the second
invocation of `itoa`? If you do, you are mistaken. More likely you did
not copy and paste your code, but retyped it -- badly.

Also:

return 0;

Would've been nice (although not required in C99).
}


Once corrected, when I run it, I get:

00
00

Which is incorrect.

As OP's question sounds like a homework assignment, I'll leave it to two
of you to correct this (or come up with something different).

--
BR, Vladimir

Those who in quarrels interpose, must often wipe a bloody nose.

Mar 16 '06 #5

P: n/a
CoL
Who the hell is this Vladimir.....???????
I just gave him a hint of solution....
My fuction char* itoa(int val, int base) is perfectly right ..it
accepts only one input at a time so in main I gave two different inputs
first try itoa(8,8)base 8..then
itoa(8,2)base 2, not both same time...U will see the perfect answers.
and this is hint not a narration of exact program given with a
intention the the one who raised this problem can modify this according
to his requirements.

Do you think all mails posted in the groups contain exact perfect
optimised and performant code...???
Vladimir S. Oka wrote:
On Thursday 16 March 2006 07:48, CoL opined (in
<11**********************@i40g2000cwc.googlegroups .com>):
muss wrote:
how to convert decimal number in a hexadecimal number using C?
Please help me.
Thanks.
This solves ur problem...


No, it does not, as it doesn't work (even when all syntax errors are
corected).

Also, don't top-post (corrected here).
#include<stdio.h>

//function to convert a value to the desired base binary,oct,Hex


(Don't use `//` when posting to Usenet.)
char* itoa(int val, int base){


You never check that inputs are valid.
static char buf[32] = {0};


Are you sure 31 characters is enough for a 256-bit int on DS9K?
int i = 30;


a) Why 30?
b) Isn't it clearer to put initialisation into `for`?
for(; val && i ; --i, val /= base)

buf[i] = "0123456789abcdef"[val % base]; //its a c way to
pick up that particular index value that is in [].


Obfuscated C Contest is at <www.ioccc.org>.

return &buf[i+1];
}

int main()


It's:

int main(void) //this is wrong...

its:
int main(int argc, char** argv)
Spell out what you mean.
{

char c;
char* p,*q ^
Syntax error: missing ';'.
p=itoa(8,8);
q=itoa(8,2);
printf("%s",p);
printf("%s",p);


You need '\n' at the end of `printf` for anything to be output. You also
never output string pointed to by `q`. Do you think it's guaranteed
that the same memory will be allocated to `buf` on the second
invocation of `itoa`? If you do, you are mistaken. More likely you did
not copy and paste your code, but retyped it -- badly.

///what crap you trying to make ?? Also:

return 0;

Would've been nice (although not required in C99).
}


Once corrected, when I run it, I get:

00
00

Which is incorrect.

As OP's question sounds like a homework assignment, I'll leave it to two
of you to correct this (or come up with something different).

--
BR, Vladimir

Those who in quarrels interpose, must often wipe a bloody nose.


Mar 16 '06 #6

P: n/a
CoL said:
Who the hell is this Vladimir.....???????
A guy that pointed out some errors in your code, it seems.
I just gave him a hint of solution....
And Vladimir gave you some hints on how to make it better.
My fuction char* itoa(int val, int base) is perfectly right ..
The original doesn't appear to have reached my server (at least not yet).
I'd be glad to look it over if you want a second opinion and are prepared
to post it again. But if Vladimir says it's broken, I'm inclined to believe
him. He certainly has a tendency to be right more often than not.
Do you think all mails posted in the groups contain exact perfect
optimised and performant code...???


Of course they don't. But they ought to, if they are being presented as
solutions rather than questions. Or at least, if short cuts /have/ been
taken, these should be made explicit, perhaps with a brief comment.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
Mar 16 '06 #7

P: n/a

CoL wrote:
Who the hell is this Vladimir.....???????
You are being rude...

(A: Someone not afraid to show his full name.)
I just gave him a hint of solution....
My fuction char* itoa(int val, int base) is perfectly right ..it
You're not telling the truth...
Do you think all mails posted in the groups contain exact perfect
optimised and performant code...???
The answers should...
Vladimir S. Oka wrote:
On Thursday 16 March 2006 07:48, CoL opined (in
<11**********************@i40g2000cwc.googlegroups .com>):

int main()


It's:

int main(void) //this is wrong...

its:
int main(int argc, char** argv)


....and you don't really know C.

FYI, it can be both:

int main(void)
int main(int argc, char *argv[])
or anything that an implementation cares to define

Your

int main()

is close, but not exactly the same as the first one above.
printf("%s",p);
printf("%s",p);


You need '\n' at the end of `printf` for anything to be output. You also

///what crap you trying to make ??
That's being rude twice, and that's twice too many times...
Once corrected, when I run it, I get:

00
00

Which is incorrect.


Care to dispute this with the output of your code? If you do, please
post *exact* code that you compiled and ran, together with it's output.

That way someone may be able to check your claims (but beware the sig).
I won't, as I won't be reading any more of your posts. Goodbye.

*PLONK*

--
BR, Vladimir

Those who in quarrels interpose, must often wipe a bloody nose.

Mar 16 '06 #8

P: n/a
CoL wrote:

Who the hell is this Vladimir.....???????
I just gave him a hint of solution....
My fuction char* itoa(int val, int base) is perfectly right ..it
accepts only one input at a time so in main I gave two different inputs
first try itoa(8,8)base 8..then
itoa(8,2)base 2, not both same time...U will see the perfect answers.
and this is hint not a narration of exact program given with a
intention the the one who raised this problem can modify this according
to his requirements.

Do you think all mails posted in the groups contain exact perfect
optimised and performant code...???


Don't toppost. Do quote relative portions, and snip
irrelevancies. Ignoring your rudeness, poor spelling, poor
punctuation, and lacking proper code to criticize, we can say
little more, except that yes, we do expect code to be correct, but
not optimized.

--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson
More details at: <http://cfaj.freeshell.org/google/>
Also see <http://www.safalra.com/special/googlegroupsreply/>
Mar 16 '06 #9

P: n/a
On Thursday 16 March 2006 10:53, Vladimir S. Oka opined (in
<11**********************@i40g2000cwc.googlegroups .com>):
CoL wrote:


<snip>
Vladimir S. Oka wrote:
> On Thursday 16 March 2006 07:48, CoL opined (in
> <11**********************@i40g2000cwc.googlegroups .com>):
<snip>
> > printf("%s",p);
> > printf("%s",p);
>
> You need '\n' at the end of `printf` for anything to be output. You
> also

> ///what crap you trying to make ??
That's being rude twice, and that's twice too many times...
> Once corrected, when I run it, I get:
>
> 00
> 00
>
> Which is incorrect.


Care to dispute this with the output of your code? If you do, please
post *exact* code that you compiled and ran, together with it's
output.


FWIW, here's the code from CoL's original post, in its unadulterated
incorrectness (I've only reduced spacing, mostly vertical, and removed
C++/C99 style comments, and added missing ';'):

#include<stdio.h>

/* function to convert a value to the desired base binary,oct,Hex */
char* itoa(int val, int base){

static char buf[32] = {0};

int i = 30;

for(; val && i ; --i, val /= base)
buf[i] = "0123456789abcdef"[val % base]; /* its a c way to
pick up that particular index value that is in []. */

return &buf[i+1];
}

int main()
{
char c;
char* p,*q; /* VSO added ';' */
p=itoa(8,8);
q=itoa(8,2);
printf("%s",p);
printf("%s",p);
}
--
BR, Vladimir

We are not loved by our friends for what we are;
rather, we are loved in spite of what we are.
-- Victor Hugo

Mar 16 '06 #10

P: n/a

"Richard Heathfield" <in*****@invalid.invalid> wrote in message
news:dv**********@nwrdmz01.dmz.ncs.ea.ibs-infra.bt.com...
The original doesn't appear to have reached my server (at least not yet).

I've noticed you've had a number of problems with this. Try another open
read only server:

freenews.netfront.net
news.hdrc.edu.tw
nntp.aioe.org
Rod Pemberton
Mar 16 '06 #11

P: n/a
On 16 Mar 2006 02:29:42 -0800, in comp.lang.c , "CoL"
<ap***********@gmail.com> wrote:
Who the hell is this Vladimir.....???????
A regular contributor to CLC.
I just gave him a hint of solution....
and he pointed out a bunch of errors in your code.
My fuction char* itoa(int val, int base) is perfectly right
Since when is 8 in base eight "00" but also "00" in base 2?
itoa(8,2)base 2, not both same time...U will see the perfect answers.
I see. Your code was actually two different programmes merged into
one. Very helpful to the OP, who will have had no clue how to decipher
such gibberish.
and this is hint not a narration of exact program
Actually it now looks a lot like code posted by a ninny trying to be
smugly superior.
Do you think all mails posted in the groups contain exact perfect
optimised and performant code...???


No, but if you post b*llocks disguised as solutions to problems,
expect people to pick holes in it.
Mark McIntyre
--
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
--Brian Kernighan
Mar 16 '06 #12

P: n/a
On Thu, 16 Mar 2006 08:09:44 +0000 (UTC), "Vladimir S. Oka"
<no****@btopenworld.com> wrote:
On Thursday 16 March 2006 07:48, CoL opined (in
<11**********************@i40g2000cwc.googlegroups .com>):
char* itoa(int val, int base){

I would make base unsigned, and probably val also.
You never check that inputs are valid.
Neither do standard library routines in most cases. There are
arguments on both sides, and (IMO properly) different decisions in
different situations and usages.
static char buf[32] = {0};


Are you sure 31 characters is enough for a 256-bit int on DS9K?

That's a fair point. Although easily fixed.
int i = 30;


a) Why 30?
b) Isn't it clearer to put initialisation into `for`?
for(; val && i ; --i, val /= base)
Test-at-top means that value 0 is output as no digits (an empty
string). While mathematically defensible, this is not what most people
usually want. Test-at-bottom is one fix; another is an override (or
digits_so_far == 0) which can be extended to the additional and often
useful functionality (or digits_so_far < min_digits).
buf[i] = "0123456789abcdef"[val % base]; //its a c way to
pick up that particular index value that is in [].


Obfuscated C Contest is at <www.ioccc.org>.

I don't consider that obfuscated. If you don't understand that C
character strings, and particularly literal ones, are actually array
of char, you're in big trouble; and if you do, I think that is obvious
and admirably terse. (val % base) ["digits"] would be obfuscated.

The doubleslash comment doesn't add anything though.

<snip> You need '\n' at the end of `printf` for anything to be output. You also
never output string pointed to by `q`. Do you think it's guaranteed
that the same memory will be allocated to `buf` on the second
invocation of `itoa`? If you do, you are mistaken. More likely you did
not copy and paste your code, but retyped it -- badly.
Since he declared buf static, it certainly will remain allocated at
the same place throughout the program's entire execution.
Once corrected, when I run it, I get:

00
00

Which is incorrect.

After fixing the buffer reuse I get 10 and 1000 as expected.

- David.Thompson1 at worldnet.att.net
Mar 27 '06 #13

P: n/a
Dave Thompson opined:
On Thu, 16 Mar 2006 08:09:44 +0000 (UTC), "Vladimir S. Oka"
<no****@btopenworld.com> wrote:
On Thursday 16 March 2006 07:48, CoL opined (in
<11**********************@i40g2000cwc.googlegroups .com>):
> char* itoa(int val, int base){

I would make base unsigned, and probably val also.
You never check that inputs are valid.

Neither do standard library routines in most cases. There are
arguments on both sides, and (IMO properly) different decisions in
different situations and usages.
> static char buf[32] = {0};


Are you sure 31 characters is enough for a 256-bit int on DS9K?

That's a fair point. Although easily fixed.
> int i = 30;


a) Why 30?
b) Isn't it clearer to put initialisation into `for`?
> for(; val && i ; --i, val /= base)
> Test-at-top means that value 0 is output as no digits (an empty
string). While mathematically defensible, this is not what most
people usually want. Test-at-bottom is one fix; another is an
override (or digits_so_far == 0) which can be extended to the
additional and often useful functionality (or digits_so_far <
min_digits).
> buf[i] = "0123456789abcdef"[val % base]; //its a c way
> to
> pick up that particular index value that is in [].


Obfuscated C Contest is at <www.ioccc.org>.

I don't consider that obfuscated. If you don't understand that C
character strings, and particularly literal ones, are actually array
of char, you're in big trouble; and if you do, I think that is
obvious and admirably terse. (val % base) ["digits"] would be
obfuscated.


OK, not exactly obfuscated, but does derail (at least mine) thinking
process when reading the code. Also, makes it unnecessarily difficult
to modify the function to support base 36 numbers (which I failed to
mention originally).
The doubleslash comment doesn't add anything though.

<snip>
You need '\n' at the end of `printf` for anything to be output. You
also never output string pointed to by `q`. Do you think it's
guaranteed that the same memory will be allocated to `buf` on the
second invocation of `itoa`? If you do, you are mistaken. More
likely you did not copy and paste your code, but retyped it --
badly.

Since he declared buf static, it certainly will remain allocated at
the same place throughout the program's entire execution.


I admit I managed not to see `static`. Thanks!
Once corrected, when I run it, I get:

00
00

Which is incorrect.

After fixing the buffer reuse I get 10 and 1000 as expected.

- David.Thompson1 at worldnet.att.net


--
BR, Vladimir

There's a fine line between courage and foolishness.
Too bad it's not a fence.

Mar 27 '06 #14

This discussion thread is closed

Replies have been disabled for this discussion.