怎么把一串16进制的数据转化为2进制

16进制的数例如
01001B00220000019CF95801B8F95901B8F95901B8FDA401B7FDA401B7FDA401B8F95801B6FDA401B7FDA401B7F95801B7FDA401B8FDA401B7FDA401B8FDA401B8FDA401B7FDA40225A6AE

转化为100010101010101100001010这种形式的

要求十六进制两个两个转化

你的那串16进制数是以字符串存在的还是以16进制存在的?

如果是16进制存在,那都不用转,16进制本身就是4位2进制的形式.

如果那串16进制数是字符串,想转成2进制的字符串,那就要先把ASCII码转成16进制数,然后输出2进制的ASCII码.哥花了半小时写了段字符串的转换程序,给你参考下.

uint8_t AscToHex(char ch)
{
if(ch >= '0' && ch <= '9') //数字0~9
{
return (ch - 0x30);
}
else
{
if(ch >= 'A' && ch <= 'F') //大写字母A~F
{
return (ch - 0x37);
}
else if(ch >= 'a' && ch <= 'f') //小写字母a~f
{
return ch - 0x57;
}
else
{
return 0xFF;
}
}
}

BOOL PrintHexStringToBin(char *strHex)
{
int i;
uint8_t n;
uint8_t nHex;

if (strHex == NULL)
{
return FALSE;
}
//因为要两个字符合成一个16进制数,所以字符串长度需要是偶数.
if ((strlen(strHex) % 2) != 0)
{
return FALSE;
}

while(*strHex)
{
//转换高4位
nHex = 0;
n = AscToHex(*strHex++);
if (n == 0xFF)    //出现非法字符
{
return FALSE;
}
nHex = n << 4;

//转换低4位
n = AscToHex(*strHex++);
if (n == 0xFF)    //出现非法字符
{
return FALSE;
}
nHex |= n;

for(i=0; i<8; i++)
{
printf("%d", (nHex & (1<<(7-i))) && 1);
}
printf(" ");
}

printf("\r\n");
return TRUE;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-11
要么网上搜索进制转换
要么自己转换,比如最后一个E,十进制表示14,转换为二进制就是1110,十六进制的每位都用4位的2进制表示,即(8421码)。
第2个回答  2014-04-11
一个十六进制 对应 4位二进制 例如:
0 对应 0000
1 对应 0001
8 对应 1000
A对应 1010
B对应 1011
C对应 1100
D对应 1101
E对应 1110
F对应 1111

那么 0AB 转换成二进制就是 0000 1010 1011
只要一个一个这样转换就可以了。
相似回答