📄 type_convert.htm
字号:
"123.456";<BR>db = atof((LPCTSTR)str); <BR>db =
777.999;<BR>str.format("%e", db); <BR><BR><FONT
color=#0033cc>4。字符型要转换成int??<BR></FONT>atoi(str) <BR><BR><FONT
color=#0033cc>5。_bstr_t 到 unsigned int??<BR></FONT>_bstr_t
str;<BR>unsigned int
Length=6;<BR>Length=Length-str.length(); <BR><BR><FONT
color=#0033cc>6。VARIANT类型转换问题?<BR></FONT>我在使用MSCOMM中SetOutput()函数时<BR>形参必须为VARIANT变量<BR>如何将其它的数据类型转换为VARIANT类型?<BR>如:Cstring->VARIANT、
*char->VARIANT<BR>我对VARIANT的类型结构体不太熟,请讲详细些(最好有范例),谢谢!<BR><BR>回复贴子: <BR>回复人: vc_xiaoxin(小新) (2001-12-26
15:43:57)
得0分 <BR>VARIANT本身是一个复杂的结构,别的数据怎么转呀?关注 <BR>回复人: mpg_liu(星仁) (2001-12-27
18:33:50)
得10分 <BR>定义一个VARIANT变量后,他应该是一个结构体变量,其中有一个成员是字符型的,给这个成员赋值 <BR>回复人: LLnju(LLnju) (2001-12-27
18:36:10) 得0分 <BR>实在不清楚嘛就用 _variant_t , COleVariant
这些东东嘛,很好用的啊 <BR>回复人: softarts(CDMA2000) (2001-12-27
18:41:32) 得10分 <BR>构造一个就行了。<BR>VARIANT varXX;<BR>CString
strYY;<BR>varXX.vt=VT_BSTR;<BR>varXX.bstrVal =
strYY.allocsysstring();<BR>应该可以了。<BR>回复人: softarts(CDMA2000) (2001-12-27
18:42:11)
得0分 <BR>我也觉得COleVariant要好用一些,呵呵,我都用它。 <BR>回复人: bobofu(有问题要问) (2001-12-27
19:32:18) 得10分 <BR>CString str;<BR>_variant_t var;<BR>var
= _variant_t(str); <BR><BR><FONT
color=#0033cc>7。COleVarant 如何转换为 CString?<BR></FONT>CString
如何转换为 char *<BR>CString 如何转换为 char[xx] ??<BR><BR>CString 如何转换为
char * wsprintf或者=<BR>CString 如何转换为 char[xx]
strcpy() <BR>回复人: SecretGarden(天堂鸟) (2002-1-14 11:55:23)
得0分 <BR>COleVarant封装了VAREANT类型。<BR>VAREANT类型其实是个巨大地Union,里面自然有你<BR>想要地unsigned
char
*类型。<BR>CString地GetBuffer和Format可以实现你的后两个问题<BR><BR><BR><FONT
color=#0033cc>8。v_variant_t类型转换成cstring<BR></FONT>总提示我cstring未定义<BR>程序如下<BR>_variant_t
vfirstname;//存储的是数据库中的数据<BR>CString
str;//提示出错<BR>vfirstname=pRs->GetCollect
(_variant_t("Phone_Num"));<BR>vfirstname.ChangeType
(VT_BSTR);<BR>str=vfirstname.bstrVal;//提示出错 <BR><BR><BR>回复贴子: <BR>回复人: hydnoahark(诺亚方舟) (2001-11-12
11:56:51) 得10分 <BR>>>CString
str;//提示出错<BR>要求include <afx.h>并且设置Use run-time
Library为Multithreaded <BR>回复人: zhengyun_ustc(^-^) (2001-11-12
12:04:39)
得15分 <BR>CString未定义,说明你的工程没有引用MFC!!<BR><BR>要想使你的工程支持MFC,请按照以下步骤作:<BR>1:在你的stdafx.h的头文件中加入:<BR>#include
"afxtempl.h"<BR>这是一个囊括了MFC的集合定义的头文件,有了它,你的工程就识别Cstring类了。<BR><BR>2:在你的工程设置中,在General页中,选择“MFC”为“Using
MFC in a shared
DLL”<BR><BR>OK,现在再编译你的工程即可。 <BR>回复人: zhengyun_ustc(^-^) (2001-11-12
12:06:56)
得5分 <BR>_variant_t的bstrVal成员是BSTR类型。<BR>它是一个指向一个OLECHART*的指针。 <BR>回复人: vickowang(小苍) (2001-11-12
12:48:21) 得5分 <BR>(char
*)_bstr_t(vfirstname) <BR>回复人: smallfool(smallfool) (2001-11-12
13:52:54)
得4分 <BR>或许你还需要一个从UNICODE字符到ANSI字符的转变函数 <BR>回复人: sun_1112(萧) (2001-11-12
17:34:44)
得0分 <BR>谢谢大家<BR>给我这么大的支持!:) <BR>回复人: zhengyun_ustc(^-^) (2001-11-14
13:24:07)
得0分 <BR>用vickowang(小苍)的意见可能会有问题,转换出的字符串应该是乱码。<BR><BR>因为(char
*)转换需要一个const的字符串资源,才能强制转换。<BR>所以应该:<BR>_bstr_t bstrTemp =
_bstr_t(vfirstname.bstrVal);<BR>TCHAR
szTemp[MAX_PATH];<BR>szTemp = (char*)bstrTemp;<BR><BR><FONT
color=#0033cc>9。char *
转换为TCHAR类型??<BR></FONT>直接转换,TCHAR相当于char了<BR>char *
s;<BR>TCHAR * s1=(TCHAR *)s; <BR>回复人: dysxq() (2001-12-21
21:26:25) 得0分 <BR>要看你的程序设置是ANSI还是UNICODE,
如果是ANSI,直接转,如果是UNICODE,TCHAR相当于WCHAR,
要用mbstowcsz转一下 <BR>回复人: xiaoxiaohan(萧晓寒) (2001-12-21
23:52:17) 得0分 <BR>Unicode :宽字节字符集<BR>1.
如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?<BR>可以调用Microsoft Visual
C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。<BR>调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。<BR>2.
如何对DBCS(双字节字符集)字符串进行操作?<BR>函数 描述<BR>PTSTR CharNext ( LPCTSTR
); 返回字符串中下一个字符的地址<BR>PTSTR CharPrev ( LPCTSTR, LPCTSTR );
返回字符串中上一个字符的地址<BR>BOOL IsDBCSLeadByte( BYTE );
如果该字节是DBCS字符的第一个字节,则返回非0值<BR>3. 为什么要使用Unicode?<BR>(1)
可以很容易地在不同语言之间进行数据交换。<BR>(2)
使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。<BR>(3) 提高应用程序的运行效率。<BR>Windows
2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成<BR>Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结<BR>果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序<BR>更加有效地运行。<BR>Windows
CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI Windows函数<BR>Windows 98
只支持ANSI,只能为ANSI开发应用程序。<BR>Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。<BR>4.
如何编写Unicode源代码?<BR>Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使用<BR>Unicode来对它进行编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。<BR>_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。<BR>5.
Windows定义的Unicode数据类型有哪些?<BR>数据类型 说明<BR>WCHAR
Unicode字符<BR>PWSTR 指向Unicode字符串的指针<BR>PCWSTR
指向一个恒定的Unicode字符串的指针<BR>对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。<BR>ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。<BR>6.
如何对Unicode进行操作?<BR>字符集 特性 实例<BR>ANSI 操作函数以str开头
strcpy<BR>Unicode 操作函数以wcs开头 wcscpy<BR>MBCS 操作函数以_mbs开头
_mbscpy<BR>ANSI/Unicode 操作函数以_tcs开头
_tcscpy(C运行期库)<BR>ANSI/Unicode 操作函数以lstr开头
lstrcpy(Windows函数)<BR>所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。<BR>Windows会如下定义:<BR>#ifdef
UNICODE<BR>#define CreateWindowEx
CreateWindowExW<BR>#else<BR>#define CreateWindowEx
CreateWindowExA<BR>#endif // !UNICODE<BR>7.
如何表示Unicode字符串常量?<BR>字符集 实例<BR>ANSI “string”<BR>Unicode
L“string”<BR>ANSI/Unicode T(“string”)或_TEXT(“string”)if(
szError[0] == _TEXT(‘J’) ){ }<BR>8.
为什么应当尽量使用操作系统函数?<BR>这将有助于稍稍提高应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程Explorer.exe所使用。由于<BR>这些函数使用得很多,因此,在应用程序运行时,它们可能已经被装入RAM。<BR>如:StrCat,StrChr,StrCmp和StrCpy等。<BR>9.
如何编写符合ANSI和Unicode的应用程序?<BR>(1)
将文本串视为字符数组,而不是chars数组或字节数组。<BR>(2)
将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。<BR>(3)
将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。<BR>(4)
将TEXT宏用于原义字符和字符串。<BR>(5) 执行全局性替换(例如用PTSTR替换PSTR)。<BR>(6)
修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传<BR>递(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来<BR>分配内存。这就是说,应该调用malloc(nCharacters
*sizeof(TCHAR)),而不是调用malloc(nCharacters)。<BR>10.
如何对字符串进行有选择的比较?<BR>通过调用CompareString来实现。<BR>标志
含义<BR>NORM_IGNORECASE 忽略字母的大小写<BR>NORM_IGNOREKANATYPE
不区分平假名与片假名字符<BR>NORM_IGNORENONSPACE
忽略无间隔字符<BR>NORM_IGNORESYMBOLS 忽略符号<BR>NORM_IGNOREWIDTH
不区分单字节字符与作为双字节字符的同一个字符<BR>SORT_STRINGSORT
将标点符号作为普通符号来处理<BR>11.
如何判断一个文本文件是ANSI还是Unicode?<BR>判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。<BR>12.
如何判断一段字符串是ANSI还是Unicode?<BR>用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此 <BR>IsTextUnicode有可能返回不正确的结果。<BR>13.
如何在Unicode与ANSI之间转换字符串?<BR>Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。<BR><BR>回复人: xtky_limi(痛在心中笑在脸上) (2001-12-22
0:35:58)
得0分 <BR>上面说的已经比较全了。 <BR>回复人: xtky_limi(痛在心中笑在脸上) (2001-12-22
0:38:13)
得0分 <BR>TEXT是宏<BR>相当于L##<BR><BR>它可以根据编译环境确定为DBMS,还是UNICODE字符集<BR><BR><FONT
color=#0033cc>10。int类型转换为CString类型?</FONT><BR>回复人: tjmxf(天涯) (2001-12-17
19:59:34)
得0分 <BR>itoa() <BR>回复人: zf925(天下哪来那么多高手) (2001-12-17
20:00:30) 得22分 <BR>char m[20];<BR>str=str +
itoa(i,m,10); <BR>回复人: yuezifeng(wybzd) (2001-12-17
20:00:50) 得22分 <BR>CString
str;<BR>str.Format("%d",i);<BR><BR>回复人: kingfish(今飞) (2001-12-17
20:06:27)
得0分 <BR>str.Format("%s%d",str,i); <BR>回复人: tanyajun(谈子) (2001-12-17
20:09:25) 得0分 <BR>CString str="test";<BR>int
i=11;<BR>CString str1;<BR>str1.Format("%d",i);<BR>str =
str+str1;<BR><BR>回复人: guanjinke(纶巾客) (2001-12-17 20:10:42)
得0分 <BR>int i=11;<BR>CString str="test";<BR>CString
addition;<BR>addition.Format("%d",i);<BR>str+=addition;<BR>就可以了。 <BR><BR><FONT
color=#0033cc>11。关于sprintf类型转换的问题</FONT><BR>sprintf(buf,"select
price from ls01 where
p_date>='%'",t_date)<BR>其中t_date是CTime类型,%后面应该是什么呢?%s是String类型,%c是char,那么CTime型对应的是什么呢? <BR> <BR>回复人: yakai(日落长河) (2001-12-17
17:45:47) 得0分 <BR>sprintf(buf,"select price from ls01
where p_date>='%S'",(LPCSTR)t_date.Format( "%A, %B %d, %Y"
));<BR>如果不行,就<BR>char temp[50];<BR>CString str=t_date.Format(
"%A, %B %d, %Y"
);<BR>strcpy(temp,(LPCSTR)str);<BR>sprintf(buf,"select price
from ls01 where
p_date>='%S'",temp);<BR>CTime::Format返回CString <BR>回复人: loh(乐啸天涯) (2001-12-17
17:52:57) 得0分 <BR>wait<BR><BR>don't
know <BR>回复人: masterz() (2001-12-17 20:21:05)
得0分 <BR>SQL语句中日期要写成字符串"yyyymmdd" <BR><BR><BR><FONT
color=#0033cc>12。类型转换 unsigned int
<==>CString??</FONT><BR>回复次数:8<BR>发表时间:2001-12-17
10:25:23<BR><BR>unsigned int f;//unsigned int
0~4294967295<BR>CString
g;<BR>f=2300000000;<BR>g.Format("%d",f);<BR>AfxMessageBox(g);<BR>出错。
</P>
<P><BR>回复人: ydogg(灰毛兔频频) (2001-12-17 10:31:29)
得0分 <BR>unsigned int f;//unsigned int
0~4294967295<BR>CString
g;<BR>f=2300000000;<BR>g.Format("%d",f);<BR>MessageBox(g);//使用AfxMessageBox,需要窗口的句炳参数<BR><BR>回复人: asdmusic8(asdmusic8) (2001-12-17
10:35:15) 得0分 <BR>我 AfxMessageBox(g); 和MessageBox(g);
都不错。<BR>错的是g.从
2300000000=》1994967296<BR><BR>回复人: asdmusic8(asdmusic8) (2001-12-17
10:36:10) 得0分 <BR>是2300000000=》-1994967296
类型转换错。<BR><BR>回复人: ydogg(灰毛兔频频) (2001-12-17 10:37:54)
得6分 <BR>g.Format("%u",f);<BR><BR>回复人: asdmusic8(asdmusic8) (2001-12-17
10:40:24) 得0分 <BR>to dgsnmpoperate 那怎么从 CString
==>>unsigned int <BR>回复人: kingfish(今飞) (2001-12-17
10:42:10) 得6分 <BR>既然是 unsigned int,<BR>超过 0x7f000000
(2130706432) 当然不能用 %d (signed
int)用%u <BR>回复人: kingfish(今飞) (2001-12-17 10:44:57)
得8分 <BR>CString ==>>unsigned int <BR>char *p
= (LPSTR)(LPCSTR) g;<BR>f = atoi(p); <BR><BR><FONT
color=#0033cc>13。static_cast、dynamic_cast 和直接类型转换(如 (void *)p
)的区别?</FONT><BR>发表时间:2001-12-14
9:31:13<BR><BR>先拷贝MSDN中的一小段话:<BR>class B { ... };<BR>class C :
public B { ... };<BR>class D : public C { ... };<BR><BR>void
f(D* pd)<BR>{<BR>C* pc = dynamic_cast<C*>(pd); // ok: C
is a direct base class<BR>// pc points to C subobject of
pd <BR><BR>B* pb = dynamic_cast<B*>(pd); // ok: B
is an indirect base class<BR>// pb points to B subobject of
pd <BR>...<BR>}<BR>我已经知道 static_cast 和 dynamic_cast
的作用,但MSDN中并没有提到这两个操作符与直接类型转换如<BR>void f(D* pd)<BR>{<BR>C* pc =
(C*)(pd);<BR><BR>B* pb =
(B*)(pd); <BR>...<BR>}<BR>的不同啊。不知道那位知道的告诉一声,在此不胜感谢,50分奉上。<BR><BR>回复贴子:ysdesigned(清泉) (2001-12-14
10:03:07) 得0分 <BR>static_cast、dynamic_cast 代 替 简 单 的 强 制
转
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -