关于进制转换,怎么把16进制和10进制转换成2进制并打印输出?
关于进制转换,怎么把16进制和10进制转换成2进制并打印输出求解......有代码最好... 什么语言的 C语言
zyj1214 发表于 2021-1-18 22:32
C语言
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int TenNum(char a[], int B); //将输入的数字转换成10进制数
void Numchange(int m, int B); //将转换好了的10进制数转换为所需进制数
int TenNum(char a[], int B)
{
int len, i, num;
int sum = 0;
len = strlen(a); //求得字符串长度
for (i = 0; i < len; i++)
{
if (a >= '0' && a <= '9')
num = a - '0';
else if (a >= 'A' && a <= 'F')
num = a - 'A' + 10;
sum = sum * B + num;
}
return sum;
}
void Numchange(int m, int B)
{
int n;
if (m)
{
Numchange(m / B, B);
n = m % B;
if (n < 10)
printf("%d", n); //小于10直接输出
else
printf("%c", n + 55); //大于10转换成字符输出
}
}
int main()
{
int B, b;
char a;
printf("请输入待转换数的进制(2-16):");
do {
scanf_s("%d", &B);
} while (B < 2 && B > 16);
printf("请输入待转换数:");
getchar();
gets_s(a); //将输入的n进制数存放在数组a中
int m = TenNum(a, B); //将输入的数字转换成十进制数
printf("请输入需要转成几进制数(2-16):");
do {
scanf_s("%d", &b);
} while (B < 2 && B > 16);
printf("%d进制数%s转换为%d进制数的结果为:", B, a, b);
Numchange(m, b); //将十进制数转换为所需进制数
printf("\n");
system("pause");
return 0;
}
网上找的现成的代码,可以实现任意进制间的转换(2-16) 本帖最后由 风过无痕1989 于 2021-1-19 00:41 编辑
10进制转换为2进制
#include <stdio.h>
char binaryNum; // 存放转换后得到的字符二进制码
int n, count = 0; // 计数十进制整数被2除的次数
int binary_num; // 存放转换过程中的数字二进制码
void main()
{
int i, num;
printf("输入一个十进制的整数:");
scanf("%d", &num);
while ((num / 2) != 1) // 判断条件为:除以2之后的商不等于1
{
binary_num = num % 2;// 取余后的数字存入数组
num /= 2; // num = num/2; 进行下一轮的判断
count++; // 此变量用来指定数组下标
}
binary_num = 1; // 最后一次除法做完以后,剩下的商一定是1,所以在最后手动添加一个1
// 若输入为有符号数,则加上下面注释这一段
/* if(n > 0)
{
a = 1; // 若输入为正数,最高位为 1
}
else
{
a = 0; // 若输入为负数,最高位为 0
}
*/
printf("二进制数值为:");
for (i = count + 1; i >= 0; i--) // 有符号数 count + 2
{
binaryNum = binary_num + '0';
printf("%c", binaryNum);
}
printf("\n");
}
16进制转换为2进制
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0, j = 0, k, m, n = 20, num = 0;
double sum = 0;
char ch, binaryNum; // 对于支持C99的编译器,元素个数用n
char Num16; // 存放十六进制数
printf("请输入十六进制数:");
while ((ch = getchar()) != '\n')// 输入十六进制数
{
Num16 = ch;
i++;
}
n = i;
// 十六进制转二进制
for (i = 0;i < n;i++)
{
ch = Num16;
if(ch >= 'A' && ch <= 'F')
{
k = ch - 'A' + 10;
}
else
{
k = ch - '0';
}
switch (k)
{
case 0:
{
binaryNum = '0';
binaryNum = '0';
binaryNum = '0';
binaryNum = '0';
break;
}
case 1:
{
binaryNum = '0';
binaryNum = '0';
binaryNum = '0';
binaryNum = '1';
break;
}
case 2:
{
binaryNum = '0';
binaryNum = '0';
binaryNum = '1';
binaryNum = '0';
break;
}
case 3:
{
binaryNum = '0';
binaryNum = '0';
binaryNum = '1';
binaryNum = '1';
break;
}
case 4:
{
binaryNum = '0';
binaryNum = '1';
binaryNum = '0';
binaryNum = '0';
break;
}
case 5:
{
binaryNum = '0';
binaryNum = '1';
binaryNum = '0';
binaryNum = '1';
break;
}
case 6:
{
binaryNum = '0';
binaryNum = '1';
binaryNum = '1';
binaryNum = '0';
break;
}
case 7:
{
binaryNum = '0';
binaryNum = '1';
binaryNum = '1';
binaryNum = '1';
break;
}
case 8:
{
binaryNum = '1';
binaryNum = '0';
binaryNum = '0';
binaryNum = '0';
break;
}
case 9:
{
binaryNum = '1';
binaryNum = '0';
binaryNum = '0';
binaryNum = '1';
break;
}
case 10:
{
binaryNum = '1';
binaryNum = '0';
binaryNum = '1';
binaryNum = '0';
break;
}
case 11:
{
binaryNum = '1';
binaryNum = '0';
binaryNum = '1';
binaryNum = '1';
break;
}
case 12:
{
binaryNum = '1';
binaryNum = '1';
binaryNum = '0';
binaryNum = '0';
break;
}
case 13:
{
binaryNum = '1';
binaryNum = '1';
binaryNum = '0';
binaryNum = '1';
break;
}
case 14:
{
binaryNum = '1';
binaryNum = '1';
binaryNum = '1';
binaryNum = '0';
break;
}
case 15:
{
binaryNum = '1';
binaryNum = '1';
binaryNum = '1';
binaryNum = '1';
break;
}
}
j += 4;
}
n = j;
printf("转换的二进制数为:");
for (i = 0;i < n;i++)
{
if (i % 4 != 0)
{
printf("%c", binaryNum);
}
else
{
printf(" ");
printf("%c", binaryNum);
}
}
printf("\n");
} 本帖最后由 jackz007 于 2021-1-19 02:21 编辑
2 ~ 16 进制间任意转换
#include <stdio.h>
// 把整型数 d 转换为 x(2~16) 进制字符串 s
char * tox(char s[] , int * k , long long d , int x)
{
char b[] = "0123456789abcdef" ;
* k = 0 ;
s = '\0' ;
if(x <= 16) {
if(d) {
tox(s , k , d / x , x) ;
s[(* k) ++] = b ;
s[* k] = '\0' ;
}
}
return s ;
}
// 把 x(2~16)进制字符串 s 转换为整型数
long long fromx(char s[] , int x)
{
char b[] = "0123456789abcdef" ;
long long d = -1 , i , j ;
if(x <= 16 ) {
for(d = i = 0 ; s ; i ++) {
for(j = 0 ; j < x ; j ++) if(s == b) break ;
if(j < x) {
d = d * x + j;
} else {
d = -1 ;
break ;
}
}
}
return d ;
}
int main(void)
{
char s ;
long long d ;
int k , x ;
printf("请输入一个整数和目标进制数(2 - 16) : ") ;
scanf("%I64d%d" , & d , & x) ;
printf("%s\n" , tox(s , & k , d , x)) ;
printf("%I64d\n" , fromx(s , x)) ;
}
页:
[1]