이것도 그냥 인클루드 해서 쓰시면 됩니다~
단 CString이 들어가 있기 때문에 일반 C++ 프로그래밍에 쓰려면 CString을 char *형으로 바꾸시던지 CString 관련 헤더 파일을 인클루드 시키셔야 할 듯 하네요...
소스코드 보기
#include <stdio. h>
#include "afx.h"
char GetHexChar(LPCTSTR str)
{
int i,num;
char c[2];
if(strlen(str)>2) return 0;
for(i=0;i<2;i++)
{
num=toupper(str[i]) - 0x30;
if(num<0 || num>9)
{
if(num>=0x11 && num<=0x16) num-=7;
else num=0;
}
c[i]=(char)num;
}
return c[0]*16+c[1];
}
void ParseEscStr(LPCTSTR src, CString &dst, BOOL bEsc)
{
int n,i;
char buff[10];
CString str;
n=strlen(src);
dst. Empty();
if(bEsc)
{
for(i=0;i<n;i++)
{
if(src[i]<0 || src[i]==0x20)
{
wsprintf(buff,"%c%.2x",'%',(unsigned char)src[i]);
str=buff; str. MakeUpper();
dst+=str;
}
else
dst+=src[i];
}
}
else
{
i=0;
while(TRUE)
{
if(i>=n) break;
if(src[i]=='%')
{
if(i+3>n) break;
wsprintf(buff,"%c%c",src[i+1],src[i+2]);
dst+=GetHexChar(buff);
i+=3;
}
else
{
dst+=src[i];
i++;
}
}
}
}
BOOL UTF8Decoding(LPCTSTR src,CString& dst)
{
CString str;
ParseEscStr(src,str,FALSE);
int len=MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,NULL,0);
if(len==0) return FALSE;
LPWSTR pwStr=new WCHAR[len];
MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,pwStr,len);
dst=pwStr;
delete[] pwStr;
return TRUE;
}
이용법 :CString s_url = <헥스 코드>
CString tmp;
UTF8Decoding(s_url,tmp);
>> tmp에 해독된 Hex code가 출력됩니다
댓글을 달아 주세요
대체 왜이렇게 컴퓨터릴 잘하심니까 ㅠ.ㅠ
에이, 전 아직 새발의 피랍니다 *-_-*
헤에. 헥스(헥사)코드 디코딩 소스군요.
문제는 저는 쓸일이 없을듯. (...)
꼭 이런 것들은 필요할때 없길래 그때그때 만들어놓으면 올립니다 :D
언제나 어려운 내용... 들어보긴 했는데..
ㅎㅎ; 다시 뻘글이 지배하는 블로그로 돌아오겠.. [퍽]