十六进制到二进制无限长
还是想模仿大漠解析字库
发现大漠的字库十六进制文本根本太长根本无法转换 所以就构建了这函数;
字库还是没有完全理解什么意思!
它每次解析11行
如果小于等于22行还好
大于就不知道怎么解析了
看看P4的图片
FFFFFFFFFFF$十$4.3.102$22
4.3.102
4=左边突出4个
3=右边突出3个
102=有102个有效相数
22就是22行有效像数
/*大写到小写*/
char toUpper_(char* src)//大写到小写
{
char* p = NULL;
p = src;
while (*p)//字符串不结束就循环
{
if (*p >= 'A' && *p <= 'Z') //判断小写字母
*p += 32; //转大写
p++; //指针后指,准备处理下一个字母
}
return *src; //返回修改后的字符串首地址
}
/*功能:十六进制到二进制无限长
参数1:十六进制文本
参数2:返回的二进制文本
*/
BOOL HexToBin(const char* str1, char** otr)
{
if (isNull(str1)||isNull(otr))
{
return FALSE;
}
int len=strlen(str1);
if (!len)
{
return FALSE;
}
char* str = new char[len+1];
memset(str, 0, len + 1);
sprintf(str, "%s", str1);
toUpper_(str);
PCHAR p = (PCHAR)str;
for (size_t i = 0; i < len; i++)
{
if (!((p[i] >= '0' && p[i] <= '9') || (p[i] >= 'a' && p[i] <= 'f')))
{
delete[] str;
return FALSE;
}
}
char* t_ch2= new char[len * 4 + 1];
*otr = t_ch2;
memset(t_ch2, 0, len*4 + 1);
for (size_t i = 0; i < len; i++)
{
int syew = 0;
if ((p[i] >= '0' && p[i] <= '9'))
{
syew = p[i]-48;
}
else if ((p[i] >= 'a' && p[i] <= 'f'))
{
syew = p[i] - 87;
}
else
{
delete[] str;
delete[] t_ch2;
return FALSE;
}
switch (syew)
{
case 0x0:
{
char t_ch[] = "0000";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x1:
{
char t_ch[] = "0001";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x2:
{
char t_ch[] = "0010";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x3:
{
char t_ch[] = "0011";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x4:
{
char t_ch[] = "0100";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x5:
{
char t_ch[] = "0101";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x6:
{
char t_ch[] = "0110";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x7:
{
char t_ch[] = "0111";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x8:
{
char t_ch[] = "1000";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0x9:
{
char t_ch[] = "1001";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xA:
{
char t_ch[] = "1010";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xB:
{
char t_ch[] = "1011";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xC:
{
char t_ch[] = "1100";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xD:
{
char t_ch[] = "1101";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xE:
{
char t_ch[] = "1110";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
case 0xF:
{
char t_ch[] = "1111";
sprintf(t_ch2 + strlen(t_ch2), "%s", t_ch);
break;
}
break;
}
}
delete[] str;
return TRUE;
}