今天给各位分享c语言16进制char转2进制的知识,其中也会对c语言16进制转二进制进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、求c语言16进制转2进制的代码 要有注释不然看不懂 谢谢2、C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数3、C语言中,十六进制转二进制
求c语言16进制转2进制的代码 要有注释不然看不懂 谢谢
#include “stdio.h”
int main()
{
char h[30],b[1024];
int d,i,k,n;
//以字符串形式输入十六进制数
printf(“输入一个十六进制数:”);
scanf(“%s”,h);
//逐个十六进制位转换
i=0;
n=0;
do
{
//将各位(字符型)十六进制数码转为整数
if(h[i]=’0′ h[i]=’9′)
d=h[i]-‘0’;
else if(h[i]=’A’ h[i]=’F’)
d=h[i]-‘A’+10;
else
{
printf(“输入格式有错误!只对有效位转化!”);
return 0;
}
//十六进制转二进制,从最高位开始,按位权8,4,2,1,计算其对应的二进制数码存入变量数组b
k=8;//初始位权为8;
while(k=1)
{
if(d=k)//根据位权可知,该位的数码为1
{
b[n]=’1′;//将该位写入二进制数字符串
d-=k;//减去已求出的数码为1的位权,即剩下部分
n+=1;//二进制数码的已求位数后移1位
}
else//根据位权可知,该位的数码为0
{
if(n!=0)//去除含0的起始位
{
b[n]=’0′;//将该位写入二进制数字符串
n+=1;//二进制数码的已求位数后移1位
}
}
k=k/2;//向右移1位后的位权;
}
b[n]=’,’;//每位十六进制数码对应的二进制数间用”,”隔开,如果不需分隔,请删除本行
n+=1;//如果不需分隔,请同时删除本行
i+=1;//下一十六进制数码位置
}while(h[i]!=’\0′);//字符串结束标志,用于判断十六进制数是否读完
b[n]=’\0′;//字符串结束标志
printf(“%s”,b);//打印出二进制数字符串
}
C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数
十六进制转成十进制的函数:
//返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int HexToDec(char *s)
{
char *p = s;
//空串返回0。
if(*p == ‘\0’)
return 0;
//忽略开头的’0’字符
while(*p == ‘0’)
p++;
int dec = 0;
char c;
//循环直到字符串结束。
while(c = *p++)
{
//dec乘16
dec = 4;
//数字字符。
if(c = ‘0’ c = ‘9’)
{
dec += c – ‘0’;
continue;
}
//小写abcdef。
if(c = ‘a’ c = ‘f’)
{
dec += c – ‘a’ + 10;
continue;
}
//大写ABCDEF。
if(c = ‘A’ c = ‘F’)
{
dec += c – ‘A’ + 10;
continue;
}
//没有从任何一个if语句中结束,说明遇到了非法字符。
return -1;
}
//正常结束循环,返回10进制整数值。
return dec;
}
十进制转成二进制的函数:
/*递归法求二进制数*/
#includestdio.h
void printb(int x,int n);
void main()
{
int x;
printf(“input number:”);
scanf(“%d”,x);
printf(“number of decimal form: %d\n”,x);
printb(x,sizeof(int)*8);
putchar(‘\n’);
}
void printb(int x,int n)
{
if(n0)
{
putchar(‘0’+( (unsigned)(x (1(n-1) ) )(n-1)));
printb(x,n-1);
}
}
C语言中,十六进制转二进制
#include stdio.h
#include limits.h
char *bitstr(char *, void const *, size_t);
int main(int argc, char **argv)
{
unsigned char value;
char *pointer;
char ebits[CHAR_BIT * sizeof value + 1];
value = 0;
for (pointer = argv[1]; *pointer; ++pointer) {
value = 4;
switch (*pointer) {
case ‘a’:
case ‘A’:
value += 0xa;
break;
case ‘b’:
case ‘B’:
value += 0xb;
break;
case ‘c’:
case ‘C’:
value += 0xc;
break;
case ‘d’:
case ‘D’:
value += 0xd;
break;
case ‘e’:
case ‘E’:
value += 0xe;
break;
case ‘f’:
case ‘F’:
value += 0xf;
break;
default:
value += *pointer – ‘0’;
break;
}
}
bitstr(ebits, value, sizeof value);
printf(“The binary representation of 0x%s is “, argv[1]);
for (pointer = ebits, value = 0; *pointer != ‘\0’; ++pointer) {
if(value 3) {
value = 0;
putchar(‘ ‘);
putchar(*pointer);
}
else {
value++;
putchar(*pointer);
}
}
return 0;
}
char *bitstr(char *str, const void *obj, size_t n)
{
unsigned char mask;
const unsigned char *byte = obj;
char *const ptr = str;
while (n–) {
mask = ((unsigned char)-1 1) + 1;
do {
*str++ = (char)(mask byte[n] ? ‘1’ : ‘0’);
mask = 1;
} while (mask);
}
*str = ‘\0’;
return ptr;
}
关于c语言16进制char转2进制和c语言16进制转二进制的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。