首页 > 其他 > 详细

二进制转16进制

时间:2019-11-14 11:46:42      阅读:98      评论:0      收藏:0      [点我收藏+]

题目描述
给定一个二进制表示的非负整数,将其转换为十六进制数。
要求使用函数编写程序:函数原型如下:
void convert( char *input, char *output);
变量input为读入的二进制字符串,变量output为函数中要输出的十六进制字符串

输入
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。

输出
对于每组测试数据首先输出"Case #: ",#表示第几组测试数据,接着输出对应的十六进制数,字母用大写表示,每组测试结果占一行。 

样例输入

1111 
10100100

技术分享图片
 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 void convert( char *input, char *output);
 6 
 7 int main(int argc, char const *argv[])
 8 {
 9     int T;
10     int i;
11     char input[1000]= {0};
12     char output[256]= {0};
13     char format[32] = {0};
14     char total[1024] = {0};
15    scanf("%d",&T);//多组输入
16   
17    for(i=0;i<T;i++)
18    {
19     fflush(stdin);
20     gets(input);
21     convert(input,output);
22     
23     sprintf(format, "\nCase %d: ", i);
24     strcat(total, format);
25     strcat(total, output);
26    }
27    
28   printf("%s\n", total);
29    
30     return 0;
31 }
32 void convert( char *input, char *output)
33 {
34     int len = strlen(input);
35     int pos=len/4+1;
36     int j=0;
37     int i=0;
38     int sum=0;
39     if(len%4==0)
40     {
41         pos=pos-1;
42     }
43     while(len>0)
44     {
45         sum=0;
46         for(i=0;i<4&&len>0;i++,len--)
47         {
48             
49             sum=sum+(input[len-1]-0)*pow(2,i);
50         }
51         //转成16进制字符
52         sum = sum + 0;
53         if(sum>9&&sum<=9+7)
54         {
55             sum=sum+7;
56         }
57         else if(sum>9+7)
58         {
59             printf("您输入的不是正确的2进制数!\n");
60             exit(0);
61         }
62         output[--pos]=sum;
63 
64     }
65         
66 }
View Code

 



样例输出
Case 1: F 
Case 2: A4 

提示
5 = ‘5‘ - ‘0‘;

二进制转16进制

原文:https://www.cnblogs.com/zhouyuqing1024/p/11855630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!