这是用于将int(带符号的16位整数)转换为字符串的速度优化解决方案 .
这种实现避免了使用除法,因为用于Arduino的8位AVR没有硬件DIV指令,编译器将除法转换为耗时的重复减法 . 因此,最快的解决方案是使用条件分支来构建字符串 .
从RAM开始准备的固定7字节缓冲区,以避免动态分配 . 由于它只有7个字节,因此固定RAM使用的成本被认为是最低的 . 为了帮助编译器,我们将register修饰符添加到变量声明中以加速执行 .
char _int2str[7];
char* int2str( register int i ) {
register unsigned char L = 1;
register char c;
register boolean m = false;
register char b; // lower-byte of i
// negative
if ( i < 0 ) {
_int2str[ 0 ] = '-';
i = -i;
}
else L = 0;
// ten-thousands
if( i > 9999 ) {
c = i < 20000 ? 1
: i < 30000 ? 2
: 3;
_int2str[ L++ ] = c + 48;
i -= c * 10000;
m = true;
}
// thousands
if( i > 999