Symbian C++ 各种类型之间的转换
(转自:http://hi.baidu.com/marktian/blog/item/61c5c2df9a4d7d1a622798f1.html)
1.TTime转TBuf型 TBuf<32> theTime;//存储转换后的时间 TTime tt; tt.HomeTime(); _LIT(KTimeFormat,"%Y%M%D%1-%2-%3 %H:%T:%S");//格式为:2006-03-04 12:12:12 tt.FormatL(theTime,KTimeFormat);//FormatL()会以KTimeFormat字符串的形式来格式化时间在赋值给theTime 2. TDateTime转TBuf型 TTime currentTime;//声明一个TTime类型 currentTime.HomeTime();//设置TTime为当前时间 TDateTime tdt=currentTime.DateTime();//TTime ---> TDateTime TBuf<32> tmp;//存储转换完的Buf tmp.AppendNum(tdt.Year());//用AppendNum()方法将一个Tint加入到TBuf中。 _LIT(dash,"-");//声明一个横线分隔年月日,同样可声明冒号分隔小时分秒 tmp.Append( dash); tmp.AppendNum(tdt.Month()); tmp.Append(dash ); tmp.AppendNum(tdt.Day());…………时分秒的转换同上 3. TBuf转Tint型 // 15位数字 TInt iNum1(123456789009876); // 将缓存的内容设置为iNum1 iBuf.Num(iNum1); // 使用iBuf包含的内容创建TLex对象 // the 15 digit number TLex iLex(iBuf); // iNum1 TInt iNum2; //iNum2现在包含了15位数字 iLex.Val(iNum2); 4. TInt转TBuf型 TBuf<10>tmp; TInt ti=190; Tmp.AppendNum(ti); 5. TBuf转TDateTime型 将长的TBuf截成小段,分别是年月日时分秒,通过下面TBuf转TInt ,再分别把转换成TInt的年月日取出,通过TDateTime的setYear(),setMonth()等方法将时间set进TDateTime 6. 其他转换 TBuf 转换为 TPtrC16 TBuf<32> tText(_L("2004/11/05 05:44:00")); TPtrC16 tPtrSecond=tText.Mid(17,2); TPtrC16 转换为 TBufC16 TPtrC16 tPtrSecond=tText.Mid(17,2); TBufC16<10> bufcs(tPtrSecond); TBufC16 转换为 TPtr16 TBufC16<10> bufcs(tPtrSecond); TPtr16 f=bufcs.Des(); TPtr16 转换为 TBuf TBuf<10> bufSecond; bufSecond.Copy(f); TBuf 转换为 TPtr16 TBuf<10> bufSecond(_L("abc")); TPtr16 f; f.Copy(bufSecond); TBuf 转换为 TInt TInt aSecond; TLex iLexS(bufSecond); iLexS.Val(aSecond); TInt 转换为 TBuf TBuf<32> tbuf; TInt i=200; tbuf.Num(i); 以下是S60的数据类型转换(巨有用) 1.将symbian串转换成char串 char* p = NULL; TBuf8<20> buf( _L( "aaaaa" ) ); p = (char *)buf.Ptr(); 2.UTF-8转换成UNICODE CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 ); 3.UNICODE转换成UTF-8 CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 ); 4.将char串转换成symbian串 char* cc = "aaaa"; TPtrC8 a; a.Set( (const TUint8*)cc , strlen(cc) ); 再加一点: TDesC8 & buf ; TUint8 * pdata ; pdata = buf.Ptr() ; 然后,这个pdata就可以当成unsigned char *用了,这在网络通讯的时候很重要。 如果,怕pdata破坏的话,可以 TBuf8<1024> tmp_buf ; tmp_buf.Copy(buf) ; pdata = tmp_buf.Ptr() ; 这样就可以保护一下buf的数据了,尤其是如果这个buf是Socket的接收的数据是接收函数自己分配的时候。 在C++与C的交互接口中会存在如char*与TdesC之间的转换,可以这样转换,例如:
把TDesC转换成char*:
HBufC8* utf8TempText = HBufC8::NewLC(STRING_LENGTH);
TPtr8 utf8Text(utf8TempText->Des());
CnvUtfConverter::ConvertFromUnicodeToUtf8
(utf8Text,TDesCString);
Char*
cString = (char*)utf8Text.Ptr();
把char*转换成TPtr:
TPtr8 utf8Text((TText8*)cString,strlen(cString),strlen(cString));
HBufC* ucs2TempText = HBufC::NewLC(utf8Text.Length()*2);
TPtr ucs2Text(ucs2TempText->Des());
CnvUtfConverter::ConvertToUnicodeFromUtf8
(ucs2Text,utf8Text);
|