Symbian C++ 各种类型之间的转换

来源:互联网 发布:用php打印九九乘法表 编辑:程序博客网 时间:2024/04/28 19:27

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);

原创粉丝点击