/**
@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;
}
'C, C++ 문법' 카테고리의 다른 글
가변인수 활용하기 (0) | 2012.03.06 |
---|---|
대소문자 구별 없이 소스 문자열에서 특정 문자열 찾기 (0) | 2012.03.05 |
문자열 입력시 헥스 문자열을 통해 헥스 값을 그대로 입력시키고자 할 때 알아두면 좋은 tip! (0) | 2012.03.01 |
비트 연산으로 산술연산 빠르게 처리하기 (1) | 2011.07.24 |
cast 연산자 사용하여 signed , unsigned 상호 형변환시 매우 주의가 필요 (1) | 2011.07.21 |
비트 연산의 이해와 활용 (2) | 2011.07.10 |
typedef 태그네임 사용하여 구조체 선언시 문법에 맞는 올바른 형태와 주의점 (1) | 2009.11.18 |