0

Here is my code for converting int up to 15 into hex char:

static char intToHex(int i)
{
    switch (i)
    {
    case 0:
        return '0';
    case 1:
        return '1';
    case 2:
        return '2';
    case 3:
        return '3';
    case 4:
        return '4';
    case 5:
        return '5';
    case 6:
        return '6';
    case 7:
        return '7';
    case 8:
        return '8';
    case 9:
        return '9';
    case 10:
        return 'a';
    case 11:
        return 'b';
    case 12:
        return 'c';
    case 13:
        return 'd';
    case 14:
        return 'e';
    case 15:
        return 'f';
    default:
        break;
    }
}

Is there a way to write this nicer, without so many switch cases?

What I tried:

char * returnHex(int i) {

    char * hex = malloc(5);

    sprintf(hex, "%x", i);
    puts(hex);

    return hex; 
}

but this returns a char array not a char that I need. Thank you!

3
  • 1
    "0123456789abcdef"[i] Commented Dec 23, 2019 at 20:18
  • or, i["0123456789abcdef"] :-) Commented Dec 23, 2019 at 20:23
  • That is a one-liner: return (unsigned)i < 16 ? "0123456789abcdef"[i] : '\0'; Commented Dec 23, 2019 at 22:29

2 Answers 2

2

Another way:

char intToHex(int i)
{
    return (i < 10) : '0' + i : 'a' + i - 10;
}
Sign up to request clarification or add additional context in comments.

Comments

0

Just declare a character array like

const char hex[] = "0123456789abcdef";

and use

if ( i < sizeof( hex ) - 1 )
{
    return hex[i];
}
else
{
    return hex[0];  // or ant other value
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.