void valconvert8_s(unsigned int val, char*& buffer)
{
int val0 = val; // 保存10进制数
int m = 8; // 转换的模
int n = 0; // 8进制位数
// 统计8进制有几位
while(val)
{
val /= m;
n++;
}
// 转换8进制生成字符串
char* buf = new char[n];
int i = 0;
val = val0;
while(val)
{
buf[(n-1)-i] = '0' + val % m;
val /= m;
i++;
}
buf[n] = '\0';
// 传出参数
buffer = buf;
}
//十进制到任意2-36进制转换,健壮版 //
//10 to 2=<t<=36
void valconvert8hj(unsigned int val, int t,/*t进制*/ char* &buffer)
{
int val1=val, n=0;
char* buf;
while(val1)//转换数位数
{
val1 /= t;
++n;
}
buf=new char[n+1];
buf[n]='\0';
buf=&buf[n-1];
val1=val;
while(val1)
{
*buf--= (val1 % t + '0') >57 ? (val1 % t + '0') + 7 : (val1 % t + '0');//0~9,A(10)~Z(36)
val1 /= t;
}
++buf;
buffer=buf;
printf("%d(10)=%s(%d)\n",val,buf,t);
}