数制转换c语言函数 数制的转换c语言代码

c语言数制转换#include stdio.h
#define C2D(c) c='9'c='0'?(c-'0'):(c-'A'+10)
#define D2C(d) (d)=9 ? ((d)+'0'):((d)-10+'A')
int r2dec(char *src, intr)
{
int ret = 0;
while(*src)
{
ret *= r;
ret += C2D(*src);
src ++;
}
return ret;
}
void dec2r(char *dst, int r, int v)
{
int i = 0,j;
char c;
while(v)
{
dst[i++] = D2C(v%r);
v/=r;
}
dst[i] = 0;
for(j = 0; ji/2; j ++)
{
c = dst[j];
dst[j] = dst[i-j-1];
dst[i-j-1] = c;
}
}
int main()
{
char n[33];
int v;
int p,r;
while(~scanf("%d%d%s",p,r,n)p!=0)
{
v = r2dec(n, p);
dec2r(n, r, v);
puts(n);
}
return 0;
}
C语言数制转换最简单的方法, 用 char * itoa(int _Val,char * _DstBuf,int _Radix);函数.
用法举例:
int i = 0xaa;
char str[70] = {0};
itoa(i, str, 2);// str = "10101010"
itoa(i, str, 8);// str = "252"
itoa(i, str, 10);// str = "170"
itoa(i, str, 16);// str = "aa"
参数说明: _Val 是待转换的值, _DetBuf 是输出的字符串指针, 转换结果将存在这里面, _Radix 是进制数, 可以是数制转换c语言函数你想要的任何值.
返回值是 _DetBuf 的地址, 也就是转换结果
不想用那个的话给你个函数来做
参数依次是: 要转换的值, 存储结果的字符串指针, 进制数
void xtox(long val,char *buf,unsigned radix)
{
char *p;/* 指向转换输出位置 */
char *firstdig;/* 指向第一位数字(转换后的) */
char temp;/* 临时变量 */
unsigned digval;/* 当前位的数字值 */
int is_neg;/* 是否负数 */
if (radix == 10val0)/* 只有10进制的才会有正负区别 */
is_neg = 1;
else
is_neg = 0;
p = buf;
if (is_neg) {
/* 是负数, 输出-号 */
*p++ = '-';
val = (unsigned long)(-(long)val); /*这样剩下的就是正数数制转换c语言函数了, 转换方法都统一的*/
}
firstdig = p;/* 第一位数据开始的位置 */
do {
digval = (unsigned) (val % radix);
val /= radix;/* 获取下一位数字 */
/* 转换为字符 */
if (digval9)
*p++ = (char) (digval - 10 + 'a');/* 9为字母, 在转换进制10时会出现字母 */
else
*p++ = (char) (digval + '0');/* 否则为数字 */
} while (val0);
*p-- = '\0';/* 字符串结束, 加上字符串结束符号 */
do { // 因为转换时候是从个位开始的, 所以转换的结果要把字符串顺序倒过来.
temp = *p;// 这里完成的就是翻转字符串
*p = *firstdig;
*firstdig = temp;
--p;
++firstdig;
} while (firstdigp);
}
c语言 数制转换唉,研究数制转换c语言函数了一天,碰到对于10进制以上数制转换c语言函数的就实在不会了 。计算机不好表示啊 。若要表示 , 就只有用字符数组 。但用字符数组又会造成很多麻烦 。
数制转换c语言函数我只会写出10以内进制间及16进制的相互转换了 。
思前想后 , 似乎只有这条思路是最为简单的:间接转换!
10以内任意进制先转换为十进制 , 然后由十进制再转换为新进制 。
唉,一直编这题,都烦死了 。
不想再把程序写出来了 , 只提供下思路,留给你自己编吧 。
很抱歉,没能帮上你...
课程设计:数制转换(C语言)#include
stdio.h
#include
stdlib.h
//输入十进制数N和转化的进制数M
void
trans(int
n,int
m)
{
if(n)
{
trans(n/m,m);
if(n%m10)
printf("%c",n%m+'0');
else
printf("%c",n%m-10+'A');

推荐阅读