c语言 十六进制转换为二进制 用函数做
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 十六进制转换为二进制 用函数做相关的知识,希望对你有一定的参考价值。
用c语言
参考技术A 十六进制怎么表示的?如果这样表示int num=0x25AB,调用下面程序即可
void rev(int num,int k) //num为数值,k为进制
char p[10];
int count=0;
while(num>0)
p[count]=num%k;
num=num/k;count++;
printf("%s",p);
return;
如果用字符串表示,那就简单了,用个switch-case就行了
0 0000 1 0001 2 0010 3 0011 4 0100
5 0101 6 0110 7 0111 8 1000 9 1001
A 1010 B 1011 C 1100 D 1101 E 1110
F 1111
default:exit(0); 参考技术B /**************************
作者:dongyu
功能:输入 0123,输出 1111011
**************************/
main()
static char base_digit[16]='0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f';
int converted_number[64];
long int number_to_convert;
int next_digit, index=0,base;
printf("Please enter number?\n");
scanf("%ld",&number_to_convert);
do
converted_number[index]=number_to_convert % 2;
++index;
number_to_convert=number_to_convert/2;
while(number_to_convert!=0);
for(--index;index>=0;--index)
next_digit=converted_number[index];
printf("%c",base_digit[next_digit]);
printf("\n");
getch();
参考技术C #include
<stdio.h>
#include
<string.h>
#include
<malloc.h>
int
Hex2Bin(const
char
*szHexNubmer,
char
*szBinNumber)
static
char
*szH2BMap[]
=
"0000",
"0001",
"0010",
"0011",
"0100",
"0101",
"0110",
"0111",
"1000",
"1001",
"1010",
"1011",
"1100",
"1101",
"1110",
"1111",
;
int
res
=
0;
if(szHexNubmer)
if(!szBinNumber)
for(;
*szHexNubmer
>=
'0'
&&
*szHexNubmer
<=
'9'
||
*szHexNubmer
>=
'a'
&&
*szHexNubmer
<=
'f'
||
*szHexNubmer
>=
'A'
&&
*szHexNubmer
<=
'F';
++res,
++szHexNubmer);
if(!szHexNubmer[0])
return
((res
<<
2)
+
1);
return
0;
for(szBinNumber[0]=0;
szHexNubmer[0];
++szHexNubmer,
res+=4)
if(*szHexNubmer
>=
'0'
&&
*szHexNubmer
<=
'9')
strcat(szBinNumber,
szH2BMap[*szHexNubmer
-
'0']);
else
if(*szHexNubmer
>=
'a'
&&
*szHexNubmer
<=
'f')
strcat(szBinNumber,
szH2BMap[*szHexNubmer
+
(~'a')
+
11]);
else
if(*szHexNubmer
>=
'A'
&&
*szHexNubmer
<=
'F')
strcat(szBinNumber,
szH2BMap[*szHexNubmer
+
(~'A')
+
11]);
else
return
0;
if(!szHexNubmer[0])
szBinNumber[res]
=
0;
return
1;
return
0;
int
main()
char
szHexNumber[512]
=
0
;
printf("enter
a
hex
number:");
gets(szHexNumber);
int
res
=
Hex2Bin(szHexNumber,
NULL);
if(res)
char
*szBinNumber
=
(char*)malloc(res);
//memset(szBinNumber,
0,
res);
if(szBinNumber)
Hex2Bin(szHexNumber,
szBinNumber);
printf(szBinNumber);
free(szBinNumber);
return
0;
参考技术D 为二进制
用函数做
[编程] 第5个回答 推荐于2016-01-27 我不会C语言,只会delphi
我给你一段delphi语言的代码吧,我刚写的
procedure TForm1.Button1Click(Sender: TObject);
var s,s1:string;
m,i:integer;
begin
s:=edit1.text;
m:=length(s);//16进制字符串的长度
S1:='';
for i:=1 to m do
begin
case s[i] of //对于16进制的每一位,进行下面的操作
'0': S1:='0000'+S1;
'1': S1:='0001'+S1;
'2': S1:='0010'+S1;
'3': S1:='0011'+S1;
'4': S1:='0100'+S1;
'5': S1:='0101'+S1;
'6': S1:='0110'+S1;
'7': S1:='0111'+S1;
'8': S1:='1000'+S1;
'9': S1:='1001'+S1;
'A': S1:='1010'+S1;
'B': S1:='1011'+S1;
'C': S1:='1100'+S1;
'D': S1:='1101'+S1;
'E': S1:='1110'+S1;
'F': S1:='1111'+S1;
end;
end;
edit2.Text:=s1;
end;
我说一下我的思路,你可以修改一下,照这个思路做:
先定义一个 字符串变量 S1 ,用来存2进制字符串,并作为中间变量
十六进制的1位 表示 2进制的 4位
所以 对于16进制的每一位,看这个位是几,如果是0 那就对S1加上‘0000’,如果是1 那就加上’0001‘,依次类推本回答被提问者采纳
求c语言将十进制数转换为16进制的函数
函数声明为char* inttohex(int aa);形参为任意十进制数(2位数以内),调用函数后,得到转换后的16进制数,字符串类型
c语言将十进制数转换为16进制的函数:
#include<stdio.h>
main()
int u10;
char u16[10];
int w=0,a,b,i;
printf("请输入一个数字-->");
scanf("%d",&u10);
if(u10==0)
u16[0]='0';
w++;
else
a=u10;
while(a)
b=a%16;
if(b<10)
u16[w]='0'+b;
else
u16[w]='A'+b-10;
a=a/16;
w++;
printf("\\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i>=0;i--)
printf("%c",u16[i]);
printf("\\n");
扩展资料:
十进制数转换为二进制数方法
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
参考资料:
百度百科-十进制
1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。
2、具体实现方法可以参考如下程序:
#include <stdio.h>
void main()
int he;
int re=0; // 保存转换为10进制的结果
int k=16; // 16进制
int n=1; // 位权
scanf("%d", &he); // 接收用户输入的16进制数,不含0x前缀
while(he != 0)
re += (he%10)*n; // 取出各位位码值,并乘以对应的位权值
he /= 10; // 去掉16进制数的最低位,次低位变为最低位
n *= k; // 位权乘以16
printf("%d",re); // 输出转换后的结果
扩展资料:
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。
利用系统函数有:
char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。
所以代码可以为:char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)itoa (aa, buffer, 16);return (buffer);
sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。
所以代码可以为:char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)sprintf(buffer, "%x", aa);return (buffer);
参考资料:百度百科 十六进制转换_
参考技术B1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。
2、具体实现方法可以参考如下程序:
#include <stdio.h>
void main()
int he;
int re=0; // 保存转换为10进制的结果
int k=16; // 16进制
int n=1; // 位权
scanf("%d", &he); // 接收用户输入的16进制数,不含0x前缀
while(he != 0)
re += (he%10)*n; // 取出各位位码值,并乘以对应的位权值
he /= 10; // 去掉16进制数的最低位,次低位变为最低位
n *= k; // 位权乘以16
printf("%d",re); // 输出转换后的结果
扩展资料
int sw1016(unsigned int a,char *p)
unsigned int mask=0x80000000;
int t=0;
int k=0;
int sum=0;
int c=2;
*(p+0)='0';
*(p+1)='X';
*(p+10)='\\0';
for(k=0;k<8;k++)
for(t=0;t<4;t++)
if((a&mask)==mask)
sum=sum*2+1;
else
sum=sum*2+0;
a=a<<1;
if(sum<10)
p[c]=sum+'0';
else
p[c]='a'+sum-10;
sum=0;
c++;
return 0;
int main()
unsigned int in=486256;
char p[11];
sw1016(in,p);
printf("xen:%s",p);
参考资料:百度百科 十六进制至十进制转换
基本全部情况都考虑了,所以有点长,请耐心看完。代码可以直接拷贝试验,都已调试过,保证正确!
有3种方式实现,其中两种是使用系统函数,另一种是直接自己编写。
使用系统函数实现要加入#include <stdlib.h>,自己编写则不需要这个头文件。
下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
利用系统函数有
1. char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)
itoa (aa, buffer, 16);
return (buffer);
2. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)
sprintf(buffer, "%x", aa);
return (buffer);
3. 自己编写
如果参数只要两位数的整数,那么很简单。代码如下:
char buffer [3]; //用于存放转换好的十六进制字符串。由于只要支持2位整数,所以长度3即可char * inttohex(int aa)
if (aa / 16 < 10) //计算十位,并转换成字符
buffer[0] = aa / 16 + '0';
else
buffer[0] = aa / 16 - 10 + 'A';
if (aa % 16 < 10) //计算个位,并转换成字符
buffer[1] = aa % 16 + '0';
else
buffer[1] = aa % 16 - 10 + 'A';
buffer[2] = '\\0'; //字符串结束标志
return (buffer);
如果参数是任意整数,由于计算方法是每次都除以16和对16取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:
char * inttohex(int aa)
static int i = 0;
if (aa < 16) //递归结束条件
if (aa < 10) //当前数转换成字符放入字符串
buffer[i] = aa + '0';
else
buffer[i] = aa - 10 + 'A';
buffer[i+1] = '\\0'; //字符串结束标志
else
inttohex(aa / 16); //递归调用
i++; //字符串索引+1
aa %= 16; //计算当前值
if (aa < 10) //当前数转换成字符放入字符串
buffer[i] = aa + '0';
else
buffer[i] = aa - 10 + 'A';
return (buffer);
最后测试代码如下(以sprintf为例,其余只要替换inttohex函数中的代码内容即可):
#include <stdlib.h>
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度
char * inttohex(int aa)
sprintf(buffer, "%x", aa);
return (buffer);
int main ()
int num;
char * hex_str;
printf ("Enter a number: ");
scanf ("%d",&num);
hex_str = inttohex (num);
printf ("Hexadecimal number: %sH\\n", hex_str);
return 0;
可以直接拷贝试验,都已调试过,保证正确!
本回答被提问者采纳 参考技术D int i;scanf ("%d",&i);
printf ("%x",i);追问
你确定看懂我的意思了?我要的是在其他地方调用这个函数,得到一个16进制返回值。
以上是关于c语言 十六进制转换为二进制 用函数做的主要内容,如果未能解决你的问题,请参考以下文章
C语言:怎么将十进制数字转换为二进制字符串,谁能帮我写个函数