我使用ado从数据库中读取字符传,数据库中是vchar型的,内容为"12345",返回后是_bstr_t类型,然后我强行转化为LPCTSTR类型,代码内容如下:
TCHAR tstr[20];
_tcscmp(tstr,m_pset->Fields->GetItem("name")->value);
MessageBox(NULL,tstr,_T("提示"),MB_OK);
TCHAR str[]=_T("12345");
MessageBox(NULL,str,_T("提示"),MB_OK);
if(_tcscmp(str,tstr)!=0)
{
MessageBox(NULL,_T("不相等"),_T("提示"),MB_OK);
}结果这段代码执行后总是显示不相等,而MessageBox出来是一模一样的,我无法想通原因,后来我用_tcslen分别取tstr,和str的大小,结果一个是10,一个是5,可见一个应该是单字节字符串,一个是双字节,由于我在这方面没什么了解,请问各位大侠可有办法动态判定字符串类型,并作相应变换,然后使它们相等?希望各位大侠多多指教。
TCHAR tstr[20];
_tcscmp(tstr,m_pset->Fields->GetItem("name")->value);
MessageBox(NULL,tstr,_T("提示"),MB_OK);
TCHAR str[]=_T("12345");
MessageBox(NULL,str,_T("提示"),MB_OK);
if(_tcscmp(str,tstr)!=0)
{
MessageBox(NULL,_T("不相等"),_T("提示"),MB_OK);
}结果这段代码执行后总是显示不相等,而MessageBox出来是一模一样的,我无法想通原因,后来我用_tcslen分别取tstr,和str的大小,结果一个是10,一个是5,可见一个应该是单字节字符串,一个是双字节,由于我在这方面没什么了解,请问各位大侠可有办法动态判定字符串类型,并作相应变换,然后使它们相等?希望各位大侠多多指教。
_tcscpy(tstr,(_bstr_t)(m_pset->Fields->GetItem("name")->value);
不好意思!
uchar ch
一个个读到ch中,然后转化成int看看值(双字节的高位可能是0,或者是统一标志)再次申明,只是个想法,我没实践过,你可以试一试
请确认m_pset->Fields->GetItem("name")->value的类型和当前TCHAR tstr[20];的实际类型一致,否则发生类型转换。
我正是希望它发生类型转换啊,如果转换为一模一样的,我比较的时候就可以保证类型一致,事实上我就是不能保证其类型,因为MessageBox出来一样,而取其长度时候却不一样,我从数据库中读出数据后是直接转换为_bstr_t类型,而_bstr_t虽然是封装BSTR的一个类,但是它支持直接转换为LPCTSTR,而在我的程序中,从上面的代码可以看出,是没有定义_UNICODE宏的,而且我在程序中也测试了,确实没有定义_UNICODE宏(这个其实从程序一开始就应该知道,如果不使用com,是用不到UNICODE的),也就是说LPCTSTR就是const char*类型,如果发生强行转换,理论上说来结果应该就char类型的"12345",使用_tcscmp出来的结果就是0才对,但结果就是不对,我想不通得很,哎,这该死的字符串。
IsDBCSLeadByte(BYTE TestChar) to test the string /see msdn
then use MultiByteToWideChar(....) to covert // see msdn