我目前在维护一段代码,这段代码是我从之前的开发人员那里继承下来的。我需要理解一个将十六进制 ID 转换为二进制的函数。我无法完全理解他背后的逻辑。以下是代码:
int iHex2Bin(char * pchIn, char * pchOut, int iLen)
{
int i;
memset(pchOut, 0, iLen);
for(i=0; i<iLen; i++)
{
pchOut[i] = (((unsigned char) *pchIn)-0x30)*16;
pchIn++;
pchOut[i] += (((unsigned char) *pchIn)-0x30);
pchIn++;
}
return(0);
}
根据名称,它将十六进制转换为二进制。我不理解函数的逻辑。能否有人解释一下?谢谢。
感谢你们的回答。现在有点清楚了。我还添加了相反的功能以进行更多分类:
int iBin2Hex(char * pchIn, char * pchOut, int iLen) { int i;
unsigned char chInBuff[256]={0};
char chOutBuff[513]={0};
char chTemp[3]={0};
if(iLen>256)
return(-2);
memcpy(chInBuff, pchIn, iLen);
for(i=0; i<iLen; i++)
{
sprintf(chTemp, "%02X", chInBuff[i]);
strcat(chOutBuff, chTemp);
}
memcpy(pchOut, chOutBuff, iLen*2 + 1);
return(SUCCESS);
我认为这些函数是必要的,但函数名称非常令人困惑。可以使用C库函数。但代码正在正确运行,所以我没有做任何更改。只需要在将来需要时理解代码即可。
strtol(str, NULL, 16)
代替。 - Lundin