3,055
社区成员
发帖
与我相关
我的任务
分享
BYTE HexValue(BYTE a)
{
a -= 48;// '0' 0x30
if(a >32) a -=32;// 'a' 0x61
if(a > 9 ) a -= 7;// 'A' 0x41
return a;
}
//
BYTE Hex2Bytes(BYTE s[2])
{
BYTE v=0;
for(int ii=0 ;ii<2; ii++)
{
v <<=4;
v += HexValue(s[ii]);
}
return v;
}
//
void CImage2View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CString src1="%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6%E6%A8%A1%E5%A1%8A";
CString src;
src.Empty();
int len=src1.GetLength();
int move=0;
while(move<len)
{
CString sub=src1.Mid(move+1,2);
BYTE ch=Hex2Bytes((BYTE *)(LPCSTR)sub);
move+=3;
afxDump << sub << ";"; // E4;B8;AD;E6;96;87;E6;B8;AC;E8;A9;A6;E6;A8;A1;E5;A1;8A
src += (char)ch;
}
// CString src="\xE4\xB8\xAD\xE6\x96\x87\xE6\xB8\xAC\xE8\xA9\xA6\xE6\xA8\xA1\xE5\xA1\x8A";
char *pStr = src.GetBuffer(src.GetLength()); //取得str对象的原始字符串
int nBufferSize = MultiByteToWideChar(CP_UTF8, 0, pStr, -1, NULL, 0); //取得所需缓存的多少
wchar_t *pBuffer = (wchar_t*)malloc(nBufferSize * sizeof(wchar_t));//申请缓存空间
MultiByteToWideChar(CP_UTF8, 0, pStr, -1 , pBuffer, nBufferSize*sizeof(wchar_t));//转码
MessageBoxW(NULL, pBuffer, L"Text", MB_OK); //显示
free(pBuffer); //释放缓存
注意 // CString src="\xE4\xB8\xAD\xE6\x96\x87\xE6\xB8\xAC\xE8\xA9\xA6\xE6\xA8\xA1\xE5\xA1\x8A";
是 编译器 把'\xE4' 变为 值 0xE4, 离开编译器 就不一回事 了
src.Replace("%","\x"); 这个程序并不能把 ‘E4‘ 变为 值 0xE4CString src="%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6%E6%A8%A1%E5%A1%8A";
CString des="";
char *p;
char c;
unsigned int v;
p=src.c_str();
while (1) {
if (1!=sscanf(p,"%%%2x",&v)) break;
c=(char)v;
p+=3;
des=des+c;
}
char *pStr = des.GetBuffer(des.GetLength()); //取得str对象的原始字符串
int nBufferSize = MultiByteToWideChar(CP_UTF8, 0, pStr, -1, NULL, 0); //取得所需缓存的多少
wchar_t *pBuffer = (wchar_t*)malloc(nBufferSize * sizeof(wchar_t));//申请缓存空间
MultiByteToWideChar(CP_UTF8, 0, pStr, -1 , pBuffer, nBufferSize*sizeof(wchar_t));//转码
MessageBoxW(NULL, pBuffer, L"Text", MB_OK); //显示
free(pBuffer); //释放缓存