数字面值转字符串
思路:首先判断是否为负数若是则转为正数,将待转换的int类型值每次对10取余获得最低位的数字,将该数字转为字符面值,然后将int类型值除以10,直到等于0结束循环,此时由于是从int类型值的最低位开始取得,所以转换出来的字符串是反着的,将其逆序即可。
对于32位CPU处理器,int类型的最高位是符号位,为0是正数,为1则是负数。
例如:
- 正数1,十六进制为:0x00000001,第31位为0,所以是正数。
- 负数-1,十六进制为:0xFFFFFFFF,第31位为1,所以是负数。
也就是说,正数 = 负数按位取反 + 1,例如:1 = ~(-1) + 1。
代码实现:
char* my_itoa(int value)
{int i = 0, k = 0, size = 0;;static char string[16];char* p = string;/* 负数转正数并添加负号 */if(value >> 31){value = ((~value) + 1);*p++ = '-';}/* 数字转面值字符 */do{p[size++] = value % 10 + '0';value /= 10;}while(value > 0);/* 添加结束符 */p[size] = 0;/* 逆序 */for(i = 0, k = size - 1; i < k; i++, k--){p[i] ^= p[k];p[k] ^= p[i];p[i] ^= p[k];}return string;
}
测试: