如题所述
#include <stdio.h>
#include <math.h>
void main()
{
int a=98765;//需要转换的数字
int yiwei=0xF;//用以移位的数字
int numbers=0;//记录移位多次
int tmp=0,index=0;
char buffer[11]={'0'};//
buffer[1]='x';//buffer[2]='0';
buffer[10]='\0';//给最后一个补充\0
do//移位到最后高位都是1,因此最后会是一个负数
{
tmp=a&yiwei; //取出四位当做十六进制的一位
tmp>>=numbers*4;//要还原取出来的这个数字,如果不是在低位取得就需要这样操作
if(tmp>=10&&tmp<16)
buffer[10-1-index]=tmp-10+'a';//因为从最低位取的,因此赋值从数组最后面开始赋
else if(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\n",buffer);
}
#include <math.h>
void main()
{
int a=98765;//需要转换的数字
int yiwei=0xF;//用以移位的数字
int numbers=0;//记录移位多次
int tmp=0,index=0;
char buffer[11]={'0'};//
buffer[1]='x';//buffer[2]='0';
buffer[10]='\0';//给最后一个补充\0
do//移位到最后高位都是1,因此最后会是一个负数
{
tmp=a&yiwei; //取出四位当做十六进制的一位
tmp>>=numbers*4;//要还原取出来的这个数字,如果不是在低位取得就需要这样操作
if(tmp>=10&&tmp<16)
buffer[10-1-index]=tmp-10+'a';//因为从最低位取的,因此赋值从数组最后面开始赋
else if(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\n",buffer);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-04-16
printf("%x", aaa) 在屏幕上打印的aaa变量
sprintf(buf,"%x",aaa)
将你所说的放到aaa中,然后buf中就是16进制的了。
只有在打印的时候,16进制和二进制才有区别,在计算机中,都是二进制的本回答被网友采纳
sprintf(buf,"%x",aaa)
将你所说的放到aaa中,然后buf中就是16进制的了。
只有在打印的时候,16进制和二进制才有区别,在计算机中,都是二进制的本回答被网友采纳
第2个回答 2014-03-31
C语言中,二进制的4位数据表示1位的十六进制数字 如:10010101 ——> 1001 0101——>0x95
第3个回答 2014-03-31
二进制4位表示一位十六进制
例如10110101--》1011,0101=(B3)
例如10110101--》1011,0101=(B3)