헥스 문자열과 값의 상호 변환
/**
@author nameless
@brief 값을 헥스 문자열로 변환한다.
1바이트당 문자 2개로 표현한다.
예를 들어 0의 경우에 "0"이 아닌 "00"으로 변환한다.
*/
unsigned int __stdcall ValToHexStrA(char *pszDestStr, const void *pSrcVal, unsigned int cbSize)
{
unsigned int len;
len = cbSize << 1;
for (; cbSize; cbSize--) {
*(unsigned char *)pszDestStr = *(unsigned char *)pSrcVal >> 4; // 상위 4비트(128 이상인 값의 연산 대비 unsigned 형으로 캐스팅)
if (*pszDestStr >= 0 && *pszDestStr <= 9) *(unsigned char *)pszDestStr = *(unsigned char *)pszDestStr + 48; // 0 ~ 9
else *(unsigned char *)pszDestStr = *(unsigned char *)pszDestStr + 55; // A ~ F
pszDestStr++;
*(unsigned char *)pszDestStr = *(unsigned char *)pSrcVal & 0xF; // 하위 4비트
if (*pszDestStr >= 0 && *pszDestStr <= 9) *(unsigned char *)pszDestStr = *(unsigned char *)pszDestStr + 48; // 0 ~ 9
else *(unsigned char *)pszDestStr = *(unsigned char *)pszDestStr + 55; // A ~ F
pszDestStr++;
pSrcVal = (const void *)((unsigned char *)pSrcVal + 1);
}
*pszDestStr = NULL; // 널 종료
return len; // pszDestStr에 저장되는 문자열 길이를 리턴
}
/**
@author nameless
@brief 헥스 문자열을 값으로 변환한다.
전달되는 소스 문자열은 1바이트당 문자 2개의 표현 규격을 가져야 된다.
예를 들어 값이 1인 경우 "1"이 아닌 "01"로 표현되어야 한다.
*/
unsigned int __stdcall HexStrToValA(void *pDestVal, const char *pszHexStr)
{
unsigned int cbDest;
cbDest = 0;
for (; *pszHexStr; ) {
if (*pszHexStr >= '0' && *pszHexStr <= '9') *(unsigned char *)pDestVal = (*(unsigned char *)pszHexStr - 48) << 4;
else if (*pszHexStr >= 'A' && *pszHexStr <= 'F') *(unsigned char *)pDestVal = (*(unsigned char *)pszHexStr - 55) << 4;
else if (*pszHexStr >= 'a' && *pszHexStr <= 'f') *(unsigned char *)pDestVal = (*(unsigned char *)pszHexStr - 87) << 4;
else return cbDest;
pszHexStr++;
if (*pszHexStr >= '0' && *pszHexStr <= '9') *(unsigned char *)pDestVal |= (*(unsigned char *)pszHexStr - 48);
else if (*pszHexStr >= 'A' && *pszHexStr <= 'F') *(unsigned char *)pDestVal |= (*(unsigned char *)pszHexStr - 55);
else if (*pszHexStr >= 'a' && *pszHexStr <= 'f') *(unsigned char *)pDestVal |= (*(unsigned char *)pszHexStr - 87);
else return cbDest;
pszHexStr++;
cbDest++;
pDestVal = (void *)((unsigned char *)pDestVal + 1);
}
return cbDest;
}