C/C++ 整數(2進位/8進位/10進位/16進位)轉 字串
C/C++ 整數(2進位/8進位/10進位/16進位)轉 字串
資料來源:https://mp.weixin.qq.com/s/lZ9SsObIMoncjs4ZoyLRlA
線上編譯:https://www.tutorialspoint.com/compile_c_online.php
code:
#include <stdio.h>
char *sky_itoa(int value, char *str, unsigned int radix)
{
char list[] = "0123456789ABCDEF";
unsigned int tmp_value;
int i, j, k;
if (NULL == str)
{
return NULL;
}
if (2 != radix && 8 != radix && 10 != radix && 16 != radix)
{
return NULL;
}
i = 0;
k = 0;
if (radix == 10 && value < 0) {
tmp_value = (unsigned int)(0 - value);
str[i++] = '-';
k = 1;
}
else
{
tmp_value = (unsigned int)value;
}
do
{
str[i++] = list[tmp_value%radix];
tmp_value /= radix;
} while(tmp_value);
str[i] = '\0';
//翻转
char tmp;
for (j = k; j < (i+k)/2; j++)
{
tmp = str[j];
str[j] = str[i+k-j-1];
str[i+k-j-1] = tmp;
}
return str;
}
int main()
{
int a = 1254545;
char str[100] ={0};
printf("二進制: %s\n",sky_itoa(a,str,2));
printf("八進制: %s\n",sky_itoa(a,str,8));
printf("十進制: %s\n",sky_itoa(a,str,10));
printf("十六進制: %s\n",sky_itoa(a,str,16));
return 0;
}