提供 任意進制 轉 10 進制 ToDec()
與 10 進制轉任意進制 DecTo()
至於要 x 進制數字直接換成 y 進制數字
如果您知道方法的話, 請您不吝提供
任意進制轉10進制中, 有簡單的錯誤偵測,
但均假設輸入為正號, 且第一個字元不可以為'+'
若測到輸入有誤, 反回為1,將 dec 設為 -1
十進制轉任意進制,將結果存於在 char array 中.
事實上 C 裡面
(1) atof, atoi, atol (字串轉浮點數,整數)
(2) strtod,strtol,strtoul (字串轉浮點數,整數)
(3) gcvt, ecvt,fcvt (double 轉字串)
(4) itoa, ltoa, (整數轉字串)
已提供不錯的功能
這個練習純粹是作業文, 原始碼參考..
// ============================================
// filename : sCovert.cpp
// author : edison.shih.
// date : 2010.10.21
// complier : vc2008
//
// all rights reverse
// ============================================
#include <stdio.h>
#include <string.h>
// ============================================
//************************************
// Method: ToDec, 任意進制轉十進制
// Parameter: const char * Src
// Parameter: int base, 原進制
// Parameter: int * Dec, 轉換後之十進制
//************************************
int ToDec(const char *Src, int base, int *Dec)
{
int len = strlen(Src)-1;
int mul = 1;
int tmp;
for(; len>=0; --len){
if(Src[len]>='0' && Src[len]<='9'){
tmp = (Src[len]-'0');
if(tmp >= base) {
*Dec = -1;
return 0; // fail.
}
*Dec = *Dec + mul*tmp;
}
else if(Src[len]>='a' && Src[len]<='z'){
tmp = (Src[len]-'a'+10);
if(tmp >= base) {
*Dec = -1;
return 0; // fail.
}
*Dec = *Dec + mul*tmp;
}
else if(Src[len]>='A' && Src[len]<='Z'){
tmp = (Src[len]-'A'+10);
if(tmp >= base) {
*Dec = -1;
return 0; // fail.
}
*Dec = *Dec + mul*tmp;
}
else return 0; // fail.
mul*=base;
}
return 1;
}
// ============================================
void DecTo(int Dec, const int base, char *String)
{
int len = 0;
int tmp = 0;
while(Dec!=0){
tmp = Dec % base;
if(tmp>=10) String[len] = 'A' + tmp - 10;
else String[len] = '0' + tmp;
Dec/=base;
len++;
}
String[len]=0;
// reverse string
strrev(String);
}
// ============================================
int main()
{
char buffer[20] = "EFG";
char ans[20] = {0};
int Dec = 0;
ToDec(buffer, 20, &Dec);
printf("%d\n", Dec);
DecTo(Dec, 20, ans);
printf("%s\n", ans);
return 0;
}
留言列表