任意进制间有什么简便办法进行转换?

rt

计算器是一个不错的方法,如果是编程,则可以使用C语言下的itoa函数,原型如下:char* itoa(int value, char* string, int radix),其中value为要转化的十进制数,string为转换后的数,radix为要转换的进制(比如:16进制),radix可以为2~36之间的任意数。要使用这个函数必须包含stdlib.h头文件。
这个函数只能实现十进制到任意进制的转换,要实现任意进制到十进制的转换只有自己写程序了,不过不难,我这里有一个你可以参考参考,不足之处还望指点:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
/*
DecaToElse
十进制到任意进制的转换
iSrc: 待转换的数据
iFlag: 需要转换的进制(比如:十六进制 - 16)
szResult: 返回的结果字符串
返回值:转换之后的结果 否则返回空
*/
char* DecaToElse(int iSrc, int iFlag, char* szResult)
{

int iDiv = iSrc, iMod, i = 0, iTemp;
char* szRet;
char ch;

if(iFlag < 2 || iFlag > 36)
return NULL;

//求数据的位数
if(iDiv == 0)
iTemp = 2;
else iTemp = (int)(log10((float)iSrc) / log10((float)iFlag) + 2);
szRet = (char*)malloc(sizeof(char) * (iTemp + 1));

//为 0 时的处理
if(iDiv == 0){
szRet[i++] = '0';
}

while(iDiv > 0){
iMod = iDiv % iFlag;
if(iMod < 10){
szRet[i++] = iMod + 48;
} else {
szRet[i++] = iMod - 10 + 65;
}
iDiv = iDiv / iFlag;
}
szRet[i] = '\0';

//反转字符串
iMod = strlen(szRet);
iTemp = iMod / 2;
for(i = 0; i < iTemp; i++){
ch = szRet[i];

szRet[i] = szRet[iMod - 1 - i];
szRet[iMod - 1 - i] = ch;
}

if(szResult != NULL)
strcpy(szResult, szRet);
return szRet;
}

/*
ElseToDeca
任意进制到十进制的转换
szTemp: 待转换的数据
iFlag: 待转换数据的进制(比如:十六进制 - 16)
iReturn: 如果函数不成功则返回0,否则返回非0
返回值:转换之后的结果 否则返回0
*/
int ElseToDeca(const char* szTemp, int iFlag, int& iReturn)
{
int iRet = 0;

int len = strlen(szTemp);
char szSrc[33];
iReturn = 1;

if(iFlag < 2 || iFlag > 36 || (szTemp == NULL)){//错误
printf("error 0\n");
iReturn = 0;
return 0;
}

if(strlen(szTemp) == 0){
iReturn = 0;
return 0;
}

strcpy(szSrc, szTemp);
StrToUpper(szSrc);

for(int i = 0; i < len; i++){
if(iFlag <= 10){
if(szSrc[i] >= 48 && szSrc[i] < (48 + iFlag)){
iRet = iRet * iFlag + szSrc[i] - 48;
} else {//错误
iReturn = 0;
return 0;
}
} else {
if(szSrc[i] >= 48 && szSrc[i] < 58){
iRet = iRet * iFlag + szSrc[i] - 48;

} else if(szSrc[i] >=65 && szSrc[i] < (65 + iFlag - 10)){
iRet = iRet * iFlag + szSrc[i] - 65 + 10;

} else {//错误
iReturn = 0;
return 0;
}
}
}
return iRet;
}

/*
StrToUpper
将字符串中的小写字母转换为大写字母
*/
void StrToUpper(char* szSrc)
{
int len = strlen(szSrc);

for(int i = 0; i < len; i++){
if(szSrc[i] >= 'a' && szSrc[i] <= 'z'){
szSrc[i] = szSrc[i] - 32;
}
}
}
有了这几个函数就可以进行任意进制之间的转换了
温馨提示:内容为网友见解,仅供参考
第1个回答  2005-08-30
我是这样算的:
假设原始数据是YS,原始进制是YJ,目标进制是MJ,那么
先将原始数据转变为10进制[把每位数字转化10进制后加和,每位数字=该位数字值*YJ^(第几位-1) ],然后再把10进制的这个数转化为目标进制的数据(原理同转化10进制),这样就行了。
第2个回答  2005-08-30
我编的函数,一些变量的定义在外面,没复制进来,用VB写的,希望满意,我自己用者还可以
Private Function jzzh(ByVal s As String, ByVal sfrom As Long, ByVal sto As Long) As String
Dim xsstr As String
Dim zsstr As String
If s = "" Then Exit Function
If Mid(s, 1, 1) = "-" Then
fh = -1
Else
fh = 1
End If
If fh < 0 Then s = Mid(s, 2)
i = 1
Do Until i = Len(s) '去掉非法字符
If getstr(Mid(s, i, 1)) < 0 And Mid(s, i, 1) <> "." Then
s = Mid(s, 1, i - 1) + Mid(s, i + 1)
Else
i = i + 1
End If
Loop
If InStr(1, s, ".") > 0 Then
xsstr = Mid(s, InStr(1, s, ".") + 1)
zsstr = Mid(s, 1, InStr(1, s, ".") - 1)

Else
zsstr = s
xsstr = ""
End If
zscount = Len(zsstr)
xscount = Len(xsstr)
ReDim Preserve zs(1 To zscount) As Long
If xscount > 0 Then ReDim Preserve xs(1 To xscount) As Long
For i = 1 To zscount
zs(i) = getstr(Mid(zsstr, i, 1))
Next i
For i = 1 To xscount
xs(i) = getstr(Mid(xsstr, i, 1))
Next i
zsdat = 0
For i = 1 To zscount
zsdat = zsdat + zs(i) * sfrom ^ (zscount - i)
Next i
xsdat = 0
For i = 1 To xscount
xsdat = xsdat + xs(i) * sfrom ^ (-i)
Next i
zsdats = ""
j = 0
Do Until zsdat < sto
zsdats = getlng(sMod(zsdat, sto)) + zsdats
zsdat = Int(zsdat / sto)
i = i + 1
Loop
zsdats = getlng(sMod(zsdat, sto)) + zsdats
If xscount > 0 Then
i = 0
xsdats = ""
Do Until i > 10
xsdats = xsdats + getlng(Int(xsdat * sto))
xsdat = xsdat * sto - Int(xsdat * sto)

i = i + 1
Loop

i = Len(xsdats)
Do Until Mid(xsdats, i, 1) <> "0"
i = i - 1
Loop
xsdats = Mid(xsdats, 1, i)
Else
xsdats = ""
End If

jzzh = zsdats
If xscount > 0 Then jzzh = jzzh + "." + xsdats
End Function本回答被网友采纳
第3个回答  2005-08-31
如果你不是指在编程里的话
用附件里的计算器,选科学计算器就很方便
第4个回答  2005-08-30
计算器

二进制、八进制、十六进制之间如何相互转换?
使用Windows自带计算器进行转换最为直接。只需切换至科学型计算器模式,即可在不同的进制之间轻松转换。例如,要将十进制数转换为二进制、八进制或十六进制,只需输入该数并选择对应的输出进制即可。对于手动计算转换,以下是各进制转换的基本步骤和方法。十进制转二进制十进制转二进制,主要通过连续除以2并...

进制转换简便方法
采用转换高位到低位方法,即十进制先转换为十六进制,再转换为二进制。程序使用范围是小于十进制数30000的转换。因为16的立方是4096,16的平方是256,当一个数大于或等于4096而小于30000则转换为四位十六进制数;当一个数大于等于256而小于4096则转换为三位十六进制数;当一个数大于等于16而小于256则转换...

二进制转十六进制简便方法?
结论:将二进制转换为十六进制,其实质是将四位二进制数转换为一位十六进制数,通过权值相加实现。以下是简便的转换步骤:1. 四位二进制转十六进制: 首先,确定二进制数中为1的位,对应其对应的权值(2的幂次)。例如,二进制1010,权值分别为2^3=8、2^1=2。简化后,只需将这些非零权值相加,...

二进制转十六进制简便方法?
结论:将二进制转换为十六进制的过程可以通过四位二进制数对应一位十六进制数的规则简化。以下是转换的简便方法:要将二进制数转换为十六进制,关键在于理解4位二进制对应1位十六进制的对应关系。首先,将四位二进制数按权展开求和,四位二进制表示的值等于其对应权重的和(2的幂次)。例如,二进制1010...

如何快速口算出进制的转换
10转2的话,就取余数 例:153 153\/2(0次方开始)%2=1 8进2的话,就单位取余 16进2也是,就单位取余

十进制二进制互相转换,其他的进制有简便方法吗
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。原理:众所...

十进制怎样转换为二进制?
将十进制转换为二进制的方法有除2法、短除法和查表法。1、除2法:将十进制数除以2,得到商和余数(0或1),然后把商继续除以2,直到商为0为止。最后把所有余数按从上到下的顺序排列起来,即可得到相应的二进制数。例如,557(十进制)=1000101101(二进制)。这种方法需要多次进行除法运算,比较...

进制转化有没有简便方法
Windows有自带这个工具啊。。。开始-所有程序-附件-计算器-查看-科学型。。单击十进制,再输入数字,再单击二进制,数字就转换好了。。至于负数,目前没有好的办法。。

如何快速口算出进制的转换
回答:把这个数拆分,二进制就是1,2,4,8,16,32.。。对应的十六进制也是如此,简单快速的算法

常用进制之间的转换(二进制转十六进制)
与二进制转八进制原理相同,因为2的4次幂为16,所以二进制从右往左每4位二进制表示一位16进制,不足四位在二进制左边加0补齐。计算时,把每部分的四位二进制按照转换为十进制的方式进行转换,然后组合各位十六进制数即可。列如:二进制数: 1001101 转换为十六进制数可以这样表示:0 1 0 0  &...

相似回答