This question already has answers here:
Convert integer to string without access to libraries
                                
                                    (10个回答)
                                
                        
                                2年前关闭。
            
                    
我需要将int值转换为char字符串,我使用了以下函数,其中score是int类型。

void updateScore(){
   char str[5] = "0";
   sprintf(str, "%d", score);
   drawString(str);
}

void drawString5x7(char *string){
   while (*string)
      drawChar5x7(*string++);
}


这似乎行得通,只是这段代码片段是一个更大的系统的一部分,在这个系统中,我正在可用内存有限的微控制器(MSP430)上编写视频游戏。我可以在游戏冻结和崩溃之前一次更新分数。

由于某种原因,每当我添加sprintf()函数(或其他类似函数,例如snprintfasprintf)时,它都会消耗MCU上的大量可用内存。

使用sprintf函数,它将以11407字节的大小进行编译。
如果我将单行注释掉,我的代码将编译为4714字节

我对将int转换为char字符串不太熟悉,但是,我认为它不会消耗那么多内存。任何指导将不胜感激。

最佳答案

这是我从intstring功能的快速实现:

// buf - string buffer, e.g. 16 bytes
// len - size of buf
// value - integer value
char * i2s( char * buf, int len, int value )
{
    char m = 0;

    if ( value < 0 )
    {
        // if ( value == -2147483648 ) return "-2147483648"; // fix for INT_MIN
        value = -value;
        m = '-'; // minus for negative values
    }
    buf[len - 1] = 0; // 0 for end of string
    for ( int i = len - 2; i > 0; i-- ) // loop from right (last digits) to left
    {
        buf[i] = '0' + ( value % 10 );
        value /= 10;
        if ( value == 0 )
            break;
    }
    if ( m ) buf[--i] = m;
    return buf + i;
}


用法:

char my_buf[16];

char * s = i2s( my_buf, sizeof my_buf, 10850 ); // 10850 is the int value

07-26 04:20