二进制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;
}
相关推荐
paopaokaka_luck38 分钟前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风2 小时前
详解K8S--声明式API
后端
Peter_chq2 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~3 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616883 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
睡觉谁叫~~~4 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
2401_865854886 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
AskHarries6 小时前
Spring Boot集成Access DB实现数据导入和解析
java·spring boot·后端
2401_857622666 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化