convert decimal number in a hexadecimal number ?

Discussion in 'C Programming' started by muss, Mar 16, 2006.

  1. muss

    muss Guest

    how to convert decimal number in a hexadecimal number using C?
    Please help me.
    Thanks.
    muss, Mar 16, 2006
    #1
    1. Advertising

  2. muss

    Ian Collins Guest

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

    What have you tried?

    --
    Ian Collins.
    Ian Collins, Mar 16, 2006
    #2
    1. Advertising

  3. muss

    CoL Guest

    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 = "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.
    CoL, Mar 16, 2006
    #3
  4. On Thursday 16 March 2006 05:58, muss opined (in
    <>):

    > 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.
    Vladimir S. Oka, Mar 16, 2006
    #4
  5. On Thursday 16 March 2006 07:48, CoL opined (in
    <>):
    > 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 = "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.
    Vladimir S. Oka, Mar 16, 2006
    #5
  6. muss

    CoL Guest

    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
    > <>):
    > > 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 = "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.
    CoL, Mar 16, 2006
    #6
  7. 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)
    Richard Heathfield, Mar 16, 2006
    #7
  8. 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
    > > <>):
    > > >
    > > > 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.
    Vladimir S. Oka, Mar 16, 2006
    #8
  9. muss

    CBFalconer Guest

    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/>
    CBFalconer, Mar 16, 2006
    #9
  10. On Thursday 16 March 2006 10:53, Vladimir S. Oka opined (in
    <>):
    > CoL wrote:


    <snip>

    >> Vladimir S. Oka wrote:
    >> > On Thursday 16 March 2006 07:48, CoL opined (in
    >> > <>):


    <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 = "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
    Vladimir S. Oka, Mar 16, 2006
    #10
  11. "Richard Heathfield" <> wrote in message
    news:dvbf6l$sin$-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
    Rod Pemberton, Mar 16, 2006
    #11
  12. On 16 Mar 2006 02:29:42 -0800, in comp.lang.c , "CoL"
    <> 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
    Mark McIntyre, Mar 16, 2006
    #12
  13. On Thu, 16 Mar 2006 08:09:44 +0000 (UTC), "Vladimir S. Oka"
    <> wrote:

    > On Thursday 16 March 2006 07:48, CoL opined (in
    > <>):


    > > 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 = "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
    Dave Thompson, Mar 27, 2006
    #13
  14. Dave Thompson opined:

    > On Thu, 16 Mar 2006 08:09:44 +0000 (UTC), "Vladimir S. Oka"
    > <> wrote:
    >
    >> On Thursday 16 March 2006 07:48, CoL opined (in
    >> <>):

    >
    >> > 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 = "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.
    Vladimir S. Oka, Mar 27, 2006
    #14
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    14
    Views:
    1,037
    Simon Biber
    Nov 16, 2006
  2. Replies:
    6
    Views:
    618
    Keith Thompson
    Sep 2, 2007
  3. Replies:
    6
    Views:
    482
    Barry Schwarz
    Sep 4, 2007
  4. Vitaliy
    Replies:
    1
    Views:
    472
    Peter Otten
    May 29, 2008
  5. Bob Sanders
    Replies:
    5
    Views:
    216
    Ryan Lewis
    May 30, 2008
Loading...

Share This Page