This question already has answers here:
Convert integer to string without access to libraries
(10个回答)
2年前关闭。
我需要将
这似乎行得通,只是这段代码片段是一个更大的系统的一部分,在这个系统中,我正在可用内存有限的微控制器(MSP430)上编写视频游戏。我可以在游戏冻结和崩溃之前一次更新分数。
由于某种原因,每当我添加
使用
如果我将单行注释掉,我的代码将编译为4714字节
我对将
用法:
(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()
函数(或其他类似函数,例如snprintf
或asprintf
)时,它都会消耗MCU上的大量可用内存。使用
sprintf
函数,它将以11407字节的大小进行编译。如果我将单行注释掉,我的代码将编译为4714字节
我对将
int
转换为char
字符串不太熟悉,但是,我认为它不会消耗那么多内存。任何指导将不胜感激。 最佳答案
这是我从int
到string
功能的快速实现:
// 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