二进制to十六进制

输入小于等于十六位的二进制数据,输出十六进制数据;

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>






int main(void) {
    char arr[16] = { 0 }; 
    int array[16] = { 0 }; 
    int hex[4] = { 0 };
    int i = 0; 
    int  num = 0;
    scanf("%s", arr);
 
    printf("%s\n", arr);

    while (arr[i] != '\0')
    {
        i++;
    }
    printf("%d\n", i);        //arr[16]={'1','0','0','1','1','0','\0', , , ... , , , }
   
    int len = 16 - i;
    for (int k = i; k >= 0; k--)                 //往后移 arr[16]={'\0', '\0',  ... ,'\0' ,'\0' ,'1','0','0','1','1','0', }
    {                                    
        arr[k + len] = arr[k];
    }                                                           //arr[15-i]

    for (int d = 0; d < len; d++)         //前面的填充为'0'
    {                                            
        arr[d] = '0';
    }
 
    for (int j = 0; j < 16; j++) 
    {
        array[j] = arr[j] - '0';
    }

    for (int s = 0; s < 16; s++)    //array[16]={0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1}
    {                   
        printf("array[s]=%d\n", array[s]);
    }

    for (int c = 15; c >= 0; c--) 
    {
        int l = 0;
        if (array[c] != 0) 
        {
            l = 15 - c; int x = 0;
            if (l < 4) {
                x = l % 4;
                hex[0] = hex[0] + pow(2, x);
            }
            if (l >= 4 && l < 8) {
                x = (l - 4) % 8;
                hex[1] = hex[1] + pow(2, x);
            }
            if (l >= 8 && l < 12) {
                x = (l - 8) % 12;
                hex[2] = hex[2] + pow(2, x);
            }
            if (l >= 12 && l < 16) {
                x = (l - 12) % 16;
                hex[3] = hex[3] + pow(2, x);
            }
        }
    }

    char ar[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };

    printf("16radix:%c%c%c%c", ar[hex[3]], ar[hex[2]], ar[hex[1]], ar[hex[0]]);
    return 0;
}

生成十六进制的部分有点绕,所以写了个新的,空了补上算法的思路.

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
 
 
 
 
int main(void) {
    char arr[16] = { 0 }; 
    int array[16] = { 0 },array_new[16]={0};
    int hex[4] = { 0 };
    int i = 0; 
 
    scanf("%s", arr);
 
    printf("输入为:%s\n", arr);         //假设输入为:arr[16]={'1','1','0','1','1','0','\0', , , ... , , , }
 
    while (arr[i] != '\0')
    {
        i++;
    }
    printf("输入位数=%d\n", i);        
    int len = 16 - i;

    for (int k = i; k >= 0; k--)                 //往后移 arr[16]={'\0', '\0',  ... ,'\0' ,'\0' ,'1','1','0','1','1','0','0' }
    {                                    
        arr[k + len] = arr[k];
    }                                                           //arr[15-i]
 
    for (int d = 0; d < len; d++)         //前面的填充为'0'
    {                                            
        arr[d] = '0';
    }
 
    for (int j = 0; j < 16; j++) 
    {
        array[j] = arr[j] - '0';         //char数字 to int数字; 
    }

  
    for(int i=0;i<16;i++)              //array_new[16]={0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0}
    {         
    array_new[i]=array[15-i];
    }  

    for(int k=0;k<16;k++)       //倒序生成array_new;
    {
        if((k<4)&&(array_new[k]==1))
        {
            hex[3]=hex[3]+pow(2,k);
        }
        
        if(((k>=4)&&(k<8))&&(array_new[k]==1))
        {
            hex[2]=hex[2]+pow(2,k-4);
        }
        if(((k>=8)&&(k<12))&&(array_new[k]==1))
        {
            hex[1]=hex[1]+pow(2,k-8);
        }
        if(((k>=12)&&(k<16))&&(array_new[k]==1))
        {
            hex[0]=hex[0]+pow(2,k-12);
        }
    }
    printf("\n");

    char ar[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
 
    printf("16radix:%c%c%c%c", ar[hex[3]], ar[hex[2]], ar[hex[1]], ar[hex[0]]);

    return 0;
}
相关推荐
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
攸攸太上3 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
罗曼蒂克在消亡3 小时前
graphql--快速了解graphql特点
后端·graphql
潘多编程3 小时前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
大神薯条老师4 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
2401_857622665 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端
知否技术5 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
AskHarries5 小时前
如何优雅的处理NPE问题?
java·spring boot·后端
计算机学姐6 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis