函数原型: 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++;
}
}