⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc常用数据类型使用转换详解.txt

📁 VC常用数据类型使用转换详解,在网上载下来的,很有用,提供给大家
💻 TXT
📖 第 1 页 / 共 4 页
字号:
如果你是要把int 的值作为 lptstr/lpctstr 的内容的话,
可以用CString:
unsigned int a = 100;
LPCTSTR lpText;
CString str;
str.Format("%d",a);
lpText = (LPCTSTR)str;

回复人: tryibest(编の魂) (2001-8-8 8:20:20) 得5分 
wsprintf(str,"%u",ui); 
回复人: zzh() (2001-8-8 9:04:39) 得5分 
这种情况不需要进行强制转换,直接使用wsprintf就可以了。 
回复人: GJA106(中文字符) (2001-8-8 10:10:51) 得5分 
unsigned int m_na=22;
LPTSTR lptstr;
wsprintf(lptstr,"%u",m_na);

16。关于COM类型转换问题??
我定义了两个变量,一个是void *piaRef=new unsigned char[1000];另一个是m_Temp=new CComVariant();我的问题是如何将piaRef中的值
COPY到m_Temp中。 

回复人: nichang() (2001-11-21 15:34:04) 得0分 
CComBSTR bsRef=piaRef;
m_Temp=bsRef.copy() 
回复人: VincentChin(瘟神) (2001-11-21 17:04:24) 得0分 
CComBSTR bsRef=piaRef;
//error C2440: 'initializing' : cannot convert from 'void *' to 'class ATL::CComBSTR'
m_Temp=bsRef.copy();
//error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *' 
回复人: nichang() (2001-11-21 17:14:28) 得0分 
将void*改为unsigned char * 
回复人: VincentChin(瘟神) (2001-11-21 17:22:22) 得0分 
我用CComBSTR bsRef=(unsigned char*)piaRef,也不行吗? 
回复人: VincentChin(瘟神) (2001-11-21 17:28:06) 得0分 
会报错:
error C2440: 'type cast' : cannot convert from 'unsigned char *' to 'class ATL::CComBSTR' 
回复人: nichang() (2001-11-22 9:12:14) 得0分 
m_Temp=::SysAllocString((OLECHAR *)piaRef) 
回复人: VincentChin(瘟神) (2001-11-22 10:43:07) 得0分 
//error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *' 
回复人: VincentChin(瘟神) (2001-11-22 11:22:35) 得0分 
m_Temp=new CComVariant(::SysAllocString(OLECHAR *)piaRef));没有出错,但是我的m_Temp是COM组件中的一个PROPERTY,我想返回的是
unsigned char类型(单字节),但经过上述转换后,就不再是单字节了呀!怎么办? 
回复人: jiangsheng(蒋晟) (2001-11-22 11:36:58) 得0分 
把这个属性的类型改成BSTR 
回复人: GrayWhite(灰白) (2001-11-22 12:01:09) 得0分 
m_Temp = new CComVariant((char*) piaRef);就可以了。VB就是用的BSTR,你要给谁用阿?VC不用VARIANT的。 
回复人: GrayWhite(灰白) (2001-11-22 12:18:18) 得19分 
哦,我明白了,你要各字节数组:
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
if (!psa)
_com_issue_error(ERROR_NOT_ENOUGH_MEMORY);

HRESULT hr
for (long i = 0; i < 2; i ++)
{
if (FAILED (hr = SafeArrayPutElement(psa, &i, piaRef + i)))
_com_issue_error(hr);
}

_variant_t va; // include 
va.vt = VT_ARRAY | VT_UI1;
va.parray = psa;

m_Temp = new CComVariant(va); 
回复人: VincentChin(瘟神) (2001-11-22 14:21:08) 得0分 
SafeArrayPutElement(psa, &i, piaRef + i)
//error C2036: 'void *' : unknown size 
回复人: VincentChin(瘟神) (2001-11-22 14:46:05) 得0分 
To GrayWhite:为什么要for(long i=0;i<2;i++)? 
回复人: nichang() (2001-11-22 15:16:35) 得0分 
到底你想怎样转换嘛,是将数组内的值拷贝到CComVariant中存为字符串吗? 
回复人: VincentChin(瘟神) (2001-11-22 15:28:35) 得0分 
我是想把piaRef中的值照原样返回给其它程序使用。我正在做的是一个COM组件。谢谢各位! 
回复人: nichang() (2001-11-22 15:34:40) 得10分 
unsigned char *s=new unsigned char[1000];
strcpy((char*)s,"1234");//可以用你自己方法设置s中的值。
BSTR bstrS;
oleS=A2WBSTR((char*)s);//将char*转换成BSTR类型

CComVariant comVT;
comVT=oleS;//将BSTR转成CComVariant,这里一步也可,comVT=A2WBSTR((char*)s);

回复人: VincentChin(瘟神) (2001-11-22 16:54:07) 得0分 
谢谢你!
但我还有一个问题,就是如果在s中有'\0'之类的东西我该怎么返回呢?char *遇到'\0'会认为到头了。完整的设计是这样的,我定义一个void * 用来从一个外部设备获取数据,该数据应该是unsigned char,我想把这个返回的数据作为属性传出,让其它应用使用(如VB)。 
回复人: nichang() (2001-11-22 17:18:09) 得0分 
将'\0'转换成其它如'\1'就OK了, 
回复人: jiangsheng(蒋晟) (2001-11-22 18:07:16) 得0分 
用字符串数组 
回复人: VincentChin(瘟神) (2001-11-23 15:54:39) 得0分 
谢谢各位的回复!我的问题解决了!如下:
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
if (!psa)
return S_FALSE;
HRESULT hr;
for (long i = 0; i < 1000; i ++)
if (FAILED (hr = SafeArrayPutElement(psa, &i, ((unsigned char*)piaRefTemplate) + i)))
return S_FALSE;
VARIANT va;
va.vt = VT_ARRAY | VT_UI1;
va.parray = psa;
CComVariant *m_Temp = new CComVariant();
m_Temp->Copy(&va);

17。类型转换 static_cast reinterprete_cast 的区别??
static_cast reinterprete_cast 的区别 

回复人: tar(GPS) (2001-11-21 10:06:41) 得0分 
static_cast会检查转换类型健的相关性
如果没有的画会有编译错误
reinterprete_cast就是硬转了 
回复人: tigerwoods(tao) (2001-11-21 12:28:19) 得0分 
是否可以这样理解:在多重继承中,static_cast可实现对象指针的移动,从而指向正确的父类对象部分,而reinterprete_cast不作偏移? 
回复人: liu_feng_fly(我恨死驱动程序了,哎,就是为了混口饭吃) (2001-11-21 12:35:14) 得0分 
在多重继承中可以用dynamic_cast啊 

18。那如何取得CString中的字符串??
回复人: nichang() (2001-11-5 17:06:00) 得0分 
=(LPCTSTR)CString变量 
回复人: snake1122(领悟) (2001-11-5 17:12:16) 得0分 
方法太多了:
GetAt,Left,Mid,Right等等,就看你怎么取了! 
回复人: dusb(保时捷) (2001-11-5 17:34:29) 得0分 
可是不管是GetAt,Left,Mid,Right返回类型都是CString,还是不能用,我是要取其中的字符串,奇怪的是,VC中没有string类型。(我要的字符串是给树型控件中的分支名称) 
回复人: Alps_lou(云飞扬) (2001-11-5 17:41:36) 得0分 
有string类型的啊,要包含 
回复人: luxes() (2001-11-5 17:42:19) 得0分 
加上(LPCTSTR),相当于一个const char *了,还不能用? 
回复人: wt007(tt) (2001-11-5 17:48:33) 得0分 
GetBuffer 
回复人: espon99() (2001-11-5 17:54:06) 得20分 
(LPSTR)(LPCTSTR)

回复人: ineedyou(古寺僧) (2001-11-5 17:59:29) 得0分 
...m_str.GetBuffer(needlen)...;
....
m_str.ReleaseBuffer() 
回复人: dusb(保时捷) (2001-11-6 15:08:36) 得0分 
espon99大侠,果然是绝招,不过能否解释一下啊? 

19。如何从CString类型转换为Unicode string 类型?
回复人: ychener(贫血) (2001-10-20 10:28:48) 得0分 
CString本身就支持Unicode的。 
只要你选择的是UniCode编译,生成的可执行程序就是支持UniCode的 

回复人: ychener(贫血) (2001-10-20 10:30:04) 得0分 
CString类是自适应的就像TCHAR一样,如果你定义了UniCode宏 就会以UniCode编译 

回复人: xjl1980_81(阿龙) (2001-10-20 10:35:16) 得0分 
不是呀,我有个函数中有一个参数需Unicode string 类型的,比如应该填L"abc",而且引号中的内容要有变化,现在我有一个 temp变量,是CString类型的,如何用呀? 
回复人: xt_jat(桑巴) (2001-10-20 10:39:37) 得0分 
_T()
_TEXT()
行不行? 
回复人: xjl1980_81(阿龙) (2001-10-20 10:43:18) 得0分 
不行 
回复人: Jeffery__Chen() (2001-10-20 11:04:53) 得0分 
强制转化:
CString temp;
WCHAR wTemp = (WCHAR)temp; 
回复人: xjl1980_81(阿龙) (2001-10-20 11:37:06) 得0分 
to:Jeffery__Chen() 
不对呀,出现不能转换的错误 
回复人: hongzhh(关儿) (2001-10-20 11:39:42) 得0分 
问题是这样的:
temp 是 CString类型变量,值为zhh
现在有一个API 
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(
HCERTSTORE hCertStore, 
DWORD dwCertEncodingType, 
DWORD dwFindFlags, 
DWORD dwFindType, 
const void *pvFindPara, //此处用 L"zhh" 没问题 
//请问怎么转换 可以 用temp

PCCERT_CONTEXT pPrevCertContext 
);

在此谢谢大家,请帮忙看看

回复人: hongzhh(关儿) (2001-10-20 13:27:10) 得0分 
WCHAR wszDomain[256]; 
MultiByteToWideChar( CP_ACP, 0, temp,
strlen(temp)+1, wszUserName, 
sizeof(wszUserName)/sizeof(wszUserName[0]) );


wszUserName就是转换后的值

回复人: ychener(贫血) (2001-10-23 11:43:05) 得0分 
只要你用的是CString的函数就行的,如果你要用类似strcpy函数时,看看MSDN中一般情况下都有响应的函数对于Unicode的。只要换成_tcscpy等等。 
回复人: ychener(贫血) (2001-10-23 11:44:10) 得0分 
你有没有定义Unicode宏? 
20。请问在用ATL且不支持MFC的组件开发中,如何将从数据库中读到的DATE数据类型转换回为字符串?? 

复人: zhxuys(zhxuys) (2001-9-24 10:36:47) 得0分 
ATL把datetime类型的列映射为DBTIMESTAMP类型,可取出该类型的year、month、day等,然后将这些数据传递回客户端,在客户端用CTime来构造 
回复人: YUANXU(旭) (2001-9-24 11:18:14) 得0分 
to zhxuys:CTime是MFC类,在ATL 不支持MFC时不能用。DATE其实质是个double* 
回复人: zhxuys(zhxuys) (2001-9-24 11:57:01) 得0分 
你在客户端与服务器端只用ATL规定的数据类型或VARIANT类型,而在客户端,可以用MFC来重新构造想要的数据结构 

21。类型转换,CString to wchar_t ??

CString ss("aabb");
wchar_t* cc;
cc=ss.AllocSysString();

22。如何将CString类型转换为_bstr_t类型?
回复人: wei97081116(韦小宝) (2001-9-4 11:19:30) 得20分 
CString b;
_bstr_t a;
a=(_bstr_t)b; 

回复人: zhaozhen1212(赵振) (2001-9-18 1:30:18) 得0分 
_bstr_t a=b.AllocSysString();;

23。如何把一个CString类型转换成一个普通的字符串,如char*?

回复人: liu_feng_fly(我恨死驱动程序了,哎,就是为了混口饭吃) (2001-9-17 18:00:52) 得0分 
所以,直接用就可以,因为类里边有这样的转换函数 
回复人: ydogg(灰毛兔频频) (2001-9-17 18:01:21) 得0分 
CString show;

char *p = show.GetBuffer(show.GetLength()); 
回复人: jiangping_zhu(娜可露露之风之刃) (2001-9-17 18:02:05) 得0分 
(char*)(LPCTSTR)str 
回复人: bmouse(老鼠) (2001-9-18 0:10:56) 得0分 
同意楼上! 
回复人: bmouse(老鼠) (2001-9-18 0:13:22) 得0分 
你还可以通过GetBuff来直接操作CString的缓冲区,不过要记着释放缓冲区. 

24。CString 类型转换成 unsigned char类型吗??
回复人: LJN(*)风流倜傥无人及,玉树偏又临风立(*) (2001-9-17 12:46:01) 得0分 
可以用CString.GetBuffer函数 
回复人: xpmao() (2001-9-17 13:09:09) 得0分 
CString strWork;
MessageBox(0,(LPSTR)strWork,0,0);
或MessageBox(0,strWork.GetBuffer(0),0,0);

回复人: sandd(降龙掌) (2001-9-17 13:17:32) 得0分 
CString string;

(LPCTSTR)string; 
回复人: jeff_hunter(PandaLee) (2001-9-17 13:45:30) 得0分 
(unsigned char *)(LPCTSTR) 
回复人: fandh(好了) (2001-9-17 14:00:57) 得0分 
用(unsigned char *)(LPCTSTR)即可 
回复人: ygd(ygd) (2001-9-17 16:11:17) 得0分 
unsigned char *p;
CString str;
int length=str.GetLength();
for(int i=0;i p[i]=str.GetAt(i); 
回复人: swordbroken(断剑书生) (2001-9-17 16:25:57) 得0分 
CString str;
unsigned char string[30];
strcpy(string,str); 

25。何将一个unsigned int 类型变量值赋给类型为unsigned short的变量,并保证数值不丢失(当然数值在一定范围内)?
回复人: maxsuy(魔法师兔子) (2001-8-14 16:37:30) 得0分 
直接=就OK了 
回复人: oppmm(ppmm) (2001-8-14 16:38:11) 得0分 
直接赋值 
回复人: milefo(弥勒佛) (2001-8-14 16:40:40) 得0分 
如果数值在一定范围内怎么回丢失呢?
unsigned short a;
unsigned int b;
a=( b & 0xffff);
你试试看吧!

26。CString ----char* 
定义了char* aa的变量,现在有一个CString的变量bb,怎样把bb的值赋给aa呢? 

回复人: emmai(WaTaXiWaWaTaXi) (2001-8-10 11:57:33) 得0分 
aa=bb.GetBuffer(); 
回复人: hswqs(??????????????????) (2001-8-10 11:59:01) 得0分 
aa= (LPSTR)(LPCTSTR)bb; 
回复人: ydogg(灰毛兔) (2001-8-10 12:27:23) 得0分 
1.aa=bb.GetBuffer(bb.GetLenth());//第一种方法
2.aa= (LPSTR)(LPCTSTR)bb; //第二种方法 
回复人: zhizhi() (2001-8-10 13:16:23) 得0分 
aa= (char *)(LPCTSTR)bb,hehe 

27。在一个COM的接口函数中有一个 BSTR* 类型的参数,需要把一个 char * 类型转换为 BSTR* 类型,不知道如何转换? 由于调用这个函数后需要把这个参数值再取出来所以只能用指针,另外在调用的时候应该用什么类型的数据传递参数呢?大虾帮忙。

BSTR bstr = SysAllocString(L"字符串");
这样转换,用的时候你用地址操作符&啊,要不指针还得new 

回复人: yongyue2000i(小吕) (2001-9-9 18:38:26) 得13分 
CString str = "abcd";
BSTR bstr = str.AllocSysString(); 
回复人: houjzs() (2001-9-9 19:14:44) 得13分 
BSTR b = SysAllocString(OLESTR("your string"));

28。要把一个double的数字输出到CEdit控件是否需要类型转换?
回复人: jiangsheng(蒋晟) (2001-8-24 14:46:17) 得0分 
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, double& value ); 
回复人: xiezhsh(雪中行) (2001-8-24 14:56:22) 得0分 
假如你的CEdit相关的成员变量是Double型的,那根本用不着.(ClassWizard增加成员变量的对话框中,Variable Type选择Double可) 
回复人: xiezhsh(雪中行) (2001-8-24 14:58:16) 得0分 
假如你的CEdit相关的成员变量不是Double型的,是CString型,那就需要用ltoa()来转换成CString型, 
回复人: haven(大天) (2001-8-24 14:58:32) 得0分 
m_Edit.Fromat("%l",VarBouble);
updatedata(false); 
回复人: 12345678() (2001-8-24 14:59:54) 得0分 
CString m_Edit.Format("%lf", doubleVar); 
GetDlgItem(EditID)->SetWindowText(m_strEdit); 

29。该如何把 WINDOWPLACEMENT * 转换成 char **类型??

(char**)&pWP 

30。怎样把CString的类型转换成char*型的?
回复人: dcz(dcz) (2001-8-19 19:13:27) 得5分 
// str is CString var
char* temp = strdup(str);
...
free(temp); 
回复人: yu900(疾风之狼) (2001-8-19 19:57:25) 得0分 
getbuffer();即可! 
回复人: aileen_long(挑战2001) (2001-8-19 21:10:35) 得0分 
同意楼上的意见! 
回复人: czh912() (2001-8-19 21:27:08) 得0分 
char buf[20];
printf(buf,"%s",string);

回复人: casl(casl) (2001-8-19 22:59:44) 得5分 
CString s("abc");
char* temp=s.GetBuffer(10);
...
s.ReleaseBuffer(); 
回复人: cocia(高亚) (2001-8-19 23:04:23) 得0分 
char* temp=s.GetBuffer(10);
10是什么意思啊

回复人: kevin_dong(梦仙人) (2001-8-20 10:26:35) 得0分 
// str is CString var
char* temp = strdup(str);
// free
free(temp); 
我的这段代码在一个程序中能通过编译,但是在另外一个中总是出现cannot convert parameter 1 from 'class CString' to 'const char *'的错误。str和temp的类型都一样。这是为什么?

回复人: dcz(dcz) (2001-8-20 14:13:45) 得0分 
you may setting your compiler option to UNICODE, in this case, declare the var:

// str is CString var
_TCHAR* temp = _tcsdup(str);

// free
free(str);

31。SA,SB为两个结构类型??
SA* A;
SB* B;
(SB*)A->...(调用函数)
请问此时A的类型,是指向SA还是SB
此时编译器是生成一个临时指针吗?
另外,
B=(SB*)A;此时A又是什么类型???

回复贴子: 
回复人: ddeng(登登) (2001-8-9 17:13:58) 得0分 
A的类型始终是SA *
B的类型始终是SB *
当进行强制类型转换时使的是临时指针 
回复人: gold_water(风雨无阻) (2001-8-9 17:30:46) 得0分 
同意楼上的。 

32。char buff[100],char UserName[50][100],怎么将buff的值传给UserName,是其成为UserName数组中的某一项呢??

//0= strcpy(UserName[i],buff); 
回复人: Ashura(阿修罗) (2001-7-26 10:08:20) 得0分 
呵呵,benbensan抢先一步。 
回复人: tuita(斗牛士) (2001-7-26 10:13:22) 得0分 
for (i=0;i<100;i++)
*(*(username+x)+i)=*(buffer+i)
其中0《X〈50

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -