How to convert integer to char without C library?

前端 未结 3 730
盖世英雄少女心
盖世英雄少女心 2021-01-28 09:31

In a c programming exercise I am asked to convert an int to char without using the C library.

Any idea how to go about it?

edit: what I mean by int is the built

相关标签:
3条回答
  • 2021-01-28 09:38

    For completeness, if the task is to convert int to string as anthares suspects, you can use Mark's second answer to convert each digit of the integer. To get each digit, you have to look into the division and modulo operators.

    0 讨论(0)
  • 2021-01-28 09:46

    Cast it?

    char c = (char)i;
    

    Or maybe you meant this?

    char c = (char)('0' + i);
    

    I'm sure this isn't what you mean though... I'm guessing you want to create a string (char array)? If so, then you need to convert it one digit at a time starting with the least significant digit. You can do it recursively, in pseudo-code:

    function convertToString(i)
       if i < 10
           return convertDigitToChar(i)
       else
           return convertDigitToString(i / 10) concat convertDigitToChar(i % 10)
    

    Here / is integer division and % is integer modulo. You also need to handle negative numbers. This can be done by checking first if you have a negative number, calling the function on the aboslute value and adding the minus sign if necessary.

    In C for performance you would probably implement this with a loop instead of using recursion, and by directly modifying the contents of a character array instead of concatenating strings.

    0 讨论(0)
  • 2021-01-28 10:00

    If you really want a string:

    #include <stdio.h>
    
    char *tochar(int i, char *p)
    {
        if (i / 10 == 0) {
            // No more digits.
            *p++ = i + '0';
            *p = '\0';
            return p;
        }
    
        p = tochar(i / 10, p);
        *p++ = i % 10 + '0';
        *p = '\0';
        return p;
    }
    
    int main()
    {
        int i = 123456;
        char buffer[100];
        tochar(i, buffer);
        printf("i = %s\n", buffer);
    }
    
    0 讨论(0)
提交回复
热议问题