不调用任何C函数,实现一个转换功能函数

函数原型: int xchg(char *pDst, char fmt, int x)

描述:不调用任何C函数,实现一个转换功能函数,即将一个整型值,转换成二进制、八进制、十进制、十六进制字符串,结果存放到指定的内存中。

输入参数: pDst 指针型,存放转换后字符串的内存首地址
fmt 字符型,转换格式,含义如下:
‘B’ 代表二进制格式,
‘O’ 代表八进制格式,
’D’ 代表十进制格式,
‘X’ 代表十六进制格式;
x 整型, 转换的值。
输出参数:无。
返回值:整型, 格式转换后返回字符串的长度。

测试用例:

#include <stdio.h>

char  cBuf[64];
int main(int  argc, char **argv)
{
    int len;

    len = xchg(cBuf,  ‘B’,  200);
    cBuf[len] = 0;
    printf(“len = %d\n”,  len);
    printf(“cBuf = %s\n”,  cBuf);

    len = xchg(cBuf,  ‘O’,  200);
    cBuf[len] = 0;
    printf(“len = %d\n”,  len);
    printf(“cBuf = %s\n”,  cBuf);

    len = xchg(cBuf,  ‘D’,  200);
    cBuf[len] = 0;
    printf(“len = %d\n”,  len);
    printf(“cBuf = %s\n”,  cBuf);

    len = xchg(cBuf,  ‘X’,  200);
    cBuf[len] = 0;
    printf(“len = %d\n”,  len);
    printf(“cBuf = %s\n”,  cBuf);

    return  0;
}

#include

main()
{
int u10;
char u16[10];
int w=0,a,b,i;

printf("请输入一个数字-->");
scanf("%d",&u10);
if(u10==0)
{
    u16[0]='0';
    w++;
}
else
{
    a=u10;
    while(a)
    {
        b=a%16;
        if(b<10)
        {
            u16[w]='0'+b;
        }
        else
        {
            u16[w]='A'+b-10;
        }
        a=a/16;
        w++;
    }
}
printf("\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i>=0;i--)
{
    printf("%c",u16[i]);
}
printf("\n");

}

这是最复杂的,是十进制变十六进制,后续可以变化即可

#include

int main(){
unsigned int var=123;
char buf[256];

int i=0;
while(var>0){
    if(var & 1)
      buf[i++] = '1';
    else
      buf[i++] = '0';
    var = var >> 1;
}
buf[i] = 0;
printf("Binary=%s\n", buf);

sprintf(buf, "%o", var);
printf("Octal=%s\n", buf);

sprintf(buf, "%d", var);
printf("Decimal=%s\n", buf);

sprintf(buf, "%x", var);
printf("Hexadcimal=%s\n", buf);

return 0;

}

#include

using namespace std;
int xchg(char *pDst, char fmt, int x);
char cBuf[64];

int main(int argc, char **argv)
{
int len;

len = xchg(cBuf, 'B', 200);
cBuf[len] = 0;
printf("len = %d\n", len);
printf("cBuf = %s\n", cBuf);

len = xchg(cBuf, 'O', 200);
cBuf[len] = 0;
printf("len = %d\n", len);
printf("cBuf = %s\n", cBuf);

len = xchg(cBuf, 'D', 200);
cBuf[len] = 0;
printf("len = %d\n", len);
printf("cBuf = %s\n", cBuf);

len = xchg(cBuf, 'X', 200);
cBuf[len] = 0;
printf("len = %d\n", len);
printf("cBuf = %s\n", cBuf);



return  0;

}

int xchg(char pDst, char fmt, int x)
{
size_t pDestLen = 0;
unsigned int radix;
switch (fmt)
{
case 'B':radix = 2; break;
case 'O':radix = 8; break;
case 'D':radix = 10; break;
case 'X':radix = 16; break;
default:
return NULL;
break;
}
/*BO处理
/
while (x >= 1 && radix < 10)
{
pDst[pDestLen] = char(x % radix + '0');
x = x / radix;
pDestLen++;
}
/*DX处理*/
while (x >= 1 && radix >= 10)
{
unsigned int temp;
temp = x % radix;
x = x / radix;
if (temp > 9)
{
temp = temp - 10 + 'a';
}
else
{
temp = temp + '0';
}
pDst[pDestLen] = char(temp);
pDestLen++;

}

}