itoa实现代码
1 char* myitoa(int val, char* buf, int radix) 2 { 3 int seed = radix-1; 4 int move = 2; 5 switch (radix) 6 { 7 case 2: 8 move = 1; break; 9 case 8: 10 move = 3; break; 11 case 16: 12 move = 4; break; 13 default: 14 move = 1; 15 break; 16 } 17 int tmpval = val, index=0; 18 while (tmpval) { 19 tmpval = tmpval >> move; 20 index += 1; 21 } 22 index -= 1; 23 while (val) { 24 int tmp_ret = val& seed; 25 val = val >> move; 26 char c; 27 if (tmp_ret > 9) 28 c = 'a' + tmp_ret - 10; 29 else c = tmp_ret + '0'; 30 *(buf +(index--)) = c; 31 } 32 33 return buf; 34 }
发现对于0的转换有问题 修改后的代码如下:
char* myitoa(int val, char* buf, int radix) { int seed = radix-1; int move = 2; switch (radix) { case 2: move = 1; break; case 8: move = 3; break; case 16: move = 4; break; default: move = 1; break; } int tmpval = val, index=0; do { tmpval = tmpval >> move; index += 1; } while (tmpval); index -= 1; do { int tmp_ret = val& seed; val = val >> move; char c; if (tmp_ret > 9) c = 'a' + tmp_ret - 10; else c = tmp_ret + '0'; *(buf +(index--)) = c; }while (val); return buf; }
浙公网安备 33010602011771号