数字面值转字符串
思路:首先判断是否为负数若是则转为正数,将待转换的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;
}
测试: