Post List

2014년 12월 25일 목요일

MFC 16진수(Hex)로 된 CString 을 BYTE(unsigned char) Array로 변환하기

16진수 Hex Code 가 Byte 사이에 '-' 으로 연결된 경우 변환해주는 함수이다.
'-' 없이 쭉 연결된 경우는 Split()을 사용할 필요없이 그냥 2개씩 Substring 하여 진행하면 된다.

inline BYTE HexToByte(CString Ps_Hex)
{
    BYTE Rb_Byte = (Ps_Hex[0] >= '0' && Ps_Hex[0] <= '9' ?
                   (Ps_Hex[0] & 0x0f) << 4 : (0x0a + tolower(Ps_Hex[0]) - 'a') << 4)
                 | (Ps_Hex[1] >= '0' && Ps_Hex[1] <= '9' ?
                    Ps_Hex[1] & 0x0f       :  0x0a + tolower(Ps_Hex[1]) - 'a');
    return Rb_Byte;
}

BYTE* HexToBytes(CString Ps_Str, int& Ri_Length)
{
    CString* Li_Tokens = Split(Ps_Str, '-', Ri_Length);

    BYTE *Rb_Bytes = new BYTE[Ri_Length];

    for(int i=0; i < Ri_Length; i++)
    {
        Rb_Bytes[i] = HexToByte(Li_Tokens[i]);
    }

    delete[] Li_Tokens;
    return Rb_Bytes;
}




Split() 함수에 대하여는 http://devluna.blogspot.kr/2014/12/mfc-cstring-split.html 글을 참조하면 된다.

댓글 없음:

댓글 쓰기