二进制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;
}
相关推荐
Dwzun11 分钟前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
小码哥_常6 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设9 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
努力的小雨11 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
excel12 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记13 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序13 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空13 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree13 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen13 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端