以前做C培训时写的一个任意进制转换的程序,不使用库提供的转换函数,现贴出来做一下记录。
/ scale.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#define WIDTH 10
#define DATAWIDTH 50
#define MAX 4294967295
#define CONST_2 2
#define CONST_3 3
#define CONST_8 8
#define CONST_9 9
#define CONST_10 10
#define CONST_16 16
#define CHAR_0 '0'
#define CHAR_9 '9'
#define CHAR_A 'A'
#define CHAR_a 'a'
#define CHAR_Z 'Z'
#define CHAR_SPACE ' '
#define STRING_0 "0"
#define STRING_Z "Z"
bool Scale();
bool GetSourceScale(int * scale_in);
bool GetObjectScale(int * scale_out);
double OtherToDeci(int scale_in,char inputdata[]);
void DeciToOther(unsigned long deci,int scale_out,char outputdata[]);
bool GetData(char data[],int CONCOUNT,int flg);
bool GetScale(char temp[]);
bool GetSource(int in_scale,char inputdata[]);
void ScaleChange(int scale_in,char inputdata[],int scale_out,char outputdata[]);
void CleanScreen();
int _tmain(int argc, _TCHAR* argv[])
{
int flg = 0;
char cs[WIDTH];
memset(cs,0x00,sizeof(cs));
while(1)
{
printf("-----------------------------------------------------------------\n");
printf(" Data Transform Between Two Scales \n");
printf(" ----------------------------------------\n");
/*进制转换主函数*/
if(!Scale())
{
break;
}
printf("-----------------------------------------------------------------\n");
printf("input any key and press 'Enter' key to continue, 'Z' for exit:");
if(!GetData(cs,WIDTH,flg)) /*判断是否继续执行下一次转换*/
{
break;
}
system("cls"); /*清屏*/
}
return 0;
}
bool Scale()
{
int scale_in,scale_out;
char inputdata[DATAWIDTH];
char outputdata[DATAWIDTH];
/*输入源数据进制*/
if(!GetSourceScale(&scale_in))
{
return false;
}
/*输入源数据*/
if(!GetSource(scale_in,inputdata))
{
return false;
}
/*输入目标数据进制*/
if(!GetObjectScale(&scale_out))
{
return false;
}
/*进行进制转换*/
ScaleChange(scale_in,inputdata,scale_out,outputdata);
return true;
}
bool GetSourceScale(int * scale_in) /*输入源数据进制*/
{
char temparray[WIDTH];
memset(temparray,0x00,sizeof(temparray));
printf("Input source data scale and press 'Enter' key(one of 2,8,10,16. 'Z' for exit): \n");
if(!GetScale(temparray))
{
return false;
}
*scale_in = atoi(temparray);
return true;
}
bool GetObjectScale(int * scale_out) /*输入目标数据进制*/
{
char temparray[WIDTH];
memset(temparray,0x00,sizeof(temparray));
printf("Input object data scale and press 'Enter' key(one of 2,8,10,16. 'Z' for exit): \n");
if(!GetScale(temparray))
{
return false;
}
责任编辑:小草