当前位置:首页 » 编程语言 » c语言2进制转16进制

c语言2进制转16进制

发布时间: 2024-02-25 09:28:57

‘壹’ C语言--二进制转十六进制

看看这个行不行?希望对你有帮助……
#include "stdafx.h"
#include "stdio.h"//
#include "string.h"//
#include "conio.h"//
#include "stdlib.h"//
void convert(char *input, char *output){
int i=0,j,nx,lein,ii;
char cx;
lein=strlen(input);
if(nx=lein%4){//处理最左端不足4位的情况
for(cx=0;i<nx;(cx<<=1)+=(*(input+i++)=='1' ? 1 : 0));
*output=cx+(cx>9 ? 0x37 : '0');
i=1;
}

for(ii=nx;ii<lein;ii+=4){//每4位一组变换成字符
for(j=0,cx=0;j<4;(cx<<=1)+=(*(input+ii+j++)=='1' ? 1 : 0));
*(output+i++)=cx+(cx>9 ? 0x37 : '0');
}
*(output+i)=NULL;
}

void main(void){/*主程序*/
char i,ii,rc,(*pBin)[1001],output[251];
int nDec=0,n;
printf("要输入几组二进制数?\nnGroup=");
scanf("%d",&n);
if(!(pBin=(char (*)[1001])malloc(n*1001))){
printf("申请内存失败!\n");
exit(0);
}
for(ii=0;ii<n;ii++){
printf("请输入第%d个二进制数!\nBin%d=",ii+1,ii+1);
for(i=0;;){
if((rc=getch())==0xD || i==1000){
printf("\n");
break;//遇到回车或长度到1000位则结束输入
}
else if(rc=='\b' && i){//处理退位修改
printf("\b%c\b",' ');
i--;
}
else if(rc=='0'||rc=='1'){//只允许输入'1'和'0'
printf("%c",rc);//显示输入字符
if(!i && rc=='0') continue;//不要前导0
pBin[ii][i++]=rc;//存储输入字符
}
}
pBin[ii][i]=NULL;//设置字符串结束标记
}
for(i=0;i<n;i++){
convert(pBin[i],output);//调用自定义函数转换成十六进制串
printf("Case %d:0x%s\n",i+1,output);
}
free(pBin);
}

‘贰’ C语言二进制如何转换成十六进制

#include<stdio.h>
#include<math.h>
voidmain()
{


inta=98765;//需要转换的数字

intyiwei=0xF;//用以移位的数字
intnumbers=0;//记录移位多次
inttmp=0,index=0;
charbuffer[11]={'0'};//

buffer[1]='x';//buffer[2]='0';
buffer[10]='';//给最后一个补充
do//移位到最后高位都是1,因此最后会是一个负数
{
tmp=a&yiwei;//取出四位当做十六进制的一位

tmp>>=numbers*4;//要还原取出来的这个数字,如果不是在低位取得就需要这样操作

if(tmp>=10&&tmp<16)
buffer[10-1-index]=tmp-10+'a';//因为从最低位取的,因此赋值从数组最后面开始赋
elseif(tmp<10&&tmp>=0)
buffer[10-1-index]='0'+tmp;

if(yiwei<<4<0)//这里判断是不是已经到了最高位了,如果是最高位,最高的前三位是数字,最后一位是符号
yiwei=yiwei<<3;
else
yiwei<<=4;//把这个数字向后移四位,用以取下一个四位

index++;
numbers++;
}while(yiwei>0);

printf("%s ",buffer);
}

‘叁’ C语言2进制转16进制

2进制还是16进制就是一个表示形式,存在内存中的变量是不用转的,就是显示出来给人看不一样。你可以这样转
16进制显示:printf("Variable
a=%x",a);
2进制显示:
char
*
int2bin(const
int
in,char
*out)
{
int
i,r;
char
t[32],*tp;
r=in;
tp=t;
while(r>=1)
{
*tp++=r%2+48;
r/=2;
}
*tp--='\0';
while(*out++=*tp--);
*out='\0';
return
out;
}
如果你是已经有了2进制的字符串,转换成一个数,可以参照以上程序很容易就编出来了

热点内容
ios应用上传 发布:2024-09-08 09:39:41 浏览:438
ios储存密码哪里看 发布:2024-09-08 09:30:02 浏览:871
opensslcmake编译 发布:2024-09-08 09:08:48 浏览:653
linux下ntp服务器搭建 发布:2024-09-08 08:26:46 浏览:744
db2新建数据库 发布:2024-09-08 08:10:19 浏览:173
频率计源码 发布:2024-09-08 07:40:26 浏览:780
奥迪a6哪个配置带后排加热 发布:2024-09-08 07:06:32 浏览:101
linux修改apache端口 发布:2024-09-08 07:05:49 浏览:209
有多少个不同的密码子 发布:2024-09-08 07:00:46 浏览:566
linux搭建mysql服务器配置 发布:2024-09-08 06:50:02 浏览:995