一些转换的代码,在MFC中用到的,也经过MFC的调试了.
inline LPTSTR B2A(BSTR lp)

...{
int nLen=(lstrlenW(lp)+1)<<1;

LPTSTR str=new char[nLen];

WideCharToMultiByte(CP_ACP, 0, lp, -1, str, nLen, NULL, NULL);

return str;
}
inline BSTR A2B(LPCSTR lp)

...{
int nLen = lstrlen(lp)>>1-1;

BSTR str = ::SysAllocStringLen(NULL, nLen);

MultiByteToWideChar(CP_ACP, 0, lp, -1, str, nLen);

return str;
}
//由wchar转成char
//WCHAR 2 CHAR char wcharscu[160]; int wcharlen;
char chardec[160];

ZeroMemory(&chardec, 160);
unsigned char uchTmp = 0;
unsigned char pchTmp[1024];
ZeroMemory(pchTmp, 1024);
memcpy(pchTmp, wcharscu,wcharlen);
for (unsigned ix=0; ix<wcharlen/2; ix++)

...{
uchTmp = pchTmp[ix*2];
pchTmp[ix*2] = pchTmp[ix*2 + 1];
pchTmp[ix*2 + 1] = uchTmp;
}

int nRet = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)pchTmp, wcharlen/2,
chardec, 160, NULL, NULL);
wcharlen = nRet;
ZeroMemory( wcharscu, 160);
memcpy( wcharscu, chardec, nRet);


//由bstr转成char bstr str[255]; int strlen

char messagebuff[255];
bcd2ascii(messagebuff,str,strlen);
lstrcpy(str,messagebuff);
int len=lstrlen(str);

void bcd2ascii(char *dst, char *src, const int len)

...{
char *p;
p = src;

while (p < src + len) ...{
*dst++ = (*p >> 4) + 0x30;
*dst++ = (*p & 0x0F) + 0x30;
p++;
}
*dst = 0x00;
}
//char -->>_variant_t
char str[110];
_bstr_t bsstr =(_bstr_t) str;
_variant_t varstr = _variant_t(bsstr);




































































typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
------------------------------
unsigned char 无符号字符 0~255
char 有符号字符 -127~128




