c++中二进制字符串转化为十六进制字符串的函数,比如“11111111”转为对应的“FF”.
2个回答
展开全部
试试这个:
#include <stdio.h>
#include <string.h>
int main()
{
int base=0,t,i,m;
char str[80],f;
printf("input the binary number\n");
gets(str);
t=strlen(str);
int b2;
for(i=0;i<t;i++)
{
if(str[i]!='0' && str[i]!='1')//输入检查
{
printf("输入不是二进制整数!\n");
break;
}
int b=str[i]-'0';//把当前位字符变为数字
base = (base<<1) + b;
}
sprintf(str,"%X",base);
printf("%s",str);
return 0;
}
展开全部
1 #include<stdio.h>
2 int BIN2HEX(char * binary)
3 {
5 char hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
6 if(NULL!=binary){
7 printf("Error input parameter!\n");
8 return 0;
9 }
10 int length=strlen(binary);
11 int num=0;
12 char tmpchar[5]={0};
15 while(length>0){
16 memset(tmpchar,'0',4);
17 if(length>=4){
18 strncpy(tmpchar,binary+length-4,4);
19 num=(tmpchar[0]-48)*8+(tmpchar[1]-48)*4+(tmpchar[2]-48)*2+(tmpchar[3]-48);
20 sprintf("%c",hex[num]);
21 length-=4;
22 }
23 else{
24 strncpy(tmpchar+4-length,binary+length-3,length);
25 num=(tmpchar[0]-48)*8+(tmpchar[1]-48)*4+(tmpchar[2]-48)*2+(tmpchar[3]-48);
26 printf("%c\n",hex[num]);
27 length=0;
28 }
29
30 }
31 }
这个输出的顺序是颠倒的,你存在一个临时数组里面反向输出就可以了,我是为了照顾最高为不足补0,所以从后往前转换的,不过也可以先把字符串填充成4的整数倍再从头开始转换。那样可能看着简单点。就这吧
2 int BIN2HEX(char * binary)
3 {
5 char hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
6 if(NULL!=binary){
7 printf("Error input parameter!\n");
8 return 0;
9 }
10 int length=strlen(binary);
11 int num=0;
12 char tmpchar[5]={0};
15 while(length>0){
16 memset(tmpchar,'0',4);
17 if(length>=4){
18 strncpy(tmpchar,binary+length-4,4);
19 num=(tmpchar[0]-48)*8+(tmpchar[1]-48)*4+(tmpchar[2]-48)*2+(tmpchar[3]-48);
20 sprintf("%c",hex[num]);
21 length-=4;
22 }
23 else{
24 strncpy(tmpchar+4-length,binary+length-3,length);
25 num=(tmpchar[0]-48)*8+(tmpchar[1]-48)*4+(tmpchar[2]-48)*2+(tmpchar[3]-48);
26 printf("%c\n",hex[num]);
27 length=0;
28 }
29
30 }
31 }
这个输出的顺序是颠倒的,你存在一个临时数组里面反向输出就可以了,我是为了照顾最高为不足补0,所以从后往前转换的,不过也可以先把字符串填充成4的整数倍再从头开始转换。那样可能看着简单点。就这吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询