1.串转换成数字
TBuf16<20> buf(_L( "123" ) );
TLex lex( buf );
TInt iNum;
lex.Val( iNum );
这种方法也可以用来判断一个字符窜是否为数字,只是有个弊端:当字符窜所对应的数字长度超过TInt的最大值时转化将失败,可以尝试一下。所以可以一个字符一个字符的转化为数字,以便判断字符窜是否为数字,同时也可以提示用户是哪一个字符为非数字字符(如果不需要提示位置的话,可以几个字符几个字符的比较),如下:
TInt IsNumber(const TDesC & aDes)
{
TBuf<2> tempChar;
for (TInt i=0;i<aDes.Length();i++)
{
tempChar.Zero();
tempChar.Append(aDes.Mid(i,1));
TLex myLex(tempChar);
TInt32 model;
if (myLex.Val(model))
{
return i + 1;//含有非数字字符,返回字符位置,
}
}
return 0 ;//是数字窜
}
2.数字转换成串
TBuf16<20> buf;
TInt iNum = 20;
buf.Format( _L( "%d" ) , iNum );
一般的时候可以用TBuf 或HBufC自带的函数:AppendNum()就可以将数字存入字符窜,比较的简单。但是,有个情况需要注意一下,比如数字1234转化字符窜的时候,会占用4个字符的位置,所以字符窜的长度一定要大于等于4.。否则会退出。采用format函数也是一样的。
3.将symbian串转换成char串
char* p = NULL;
TBuf8<20> buf( _L( "aaaaa" ) );
p = (char *)buf.Ptr();
Symbian中可以采用c程序,所以这个转化比较有用。
4.UTF-8转换成UNICODE
CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 );
5.UNICODE转换成UTF-8
CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 );
由于symbian只能处理UNICODE字符,所以想要显示汉字的话必须将转化为UNICODE编码,否则会显示个框框或者是乱码。下面这个函数可以将代码中的汉字转化为UNICODE编码,不过一般情况下我们不在代码里面写中文,除了注释;-)
HBufC* CovToUnicodeFromChinese8(const TDesC8 &aChinese8Des)
{
HBufC* nOutput=HBufC::NewL(aChinese8Des.Length());
CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
TInt state = CCnvCharacterSetConverter::KStateDefault;
RFs nfs;
nfs.Connect();
converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,nfs);
TPtr nPt=nOutput->Des();
converter->ConvertToUnicode(nPt, aChinese8Des, state );
nfs.Close();
CleanupStack::PopAndDestroy( converter );
return nOutput;
}
还有一个注意的地方,在很多时候我们会设计到字符窜的比较,用compare或者是find之类的东西,这时我们应该先确定两个字符窜的编码格式是否相同,否则会浪费很多的时间,也有可能会造成“不知所措”的严重错误。
6.将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的接收的数据是接收函数自己分配的时候。
即Char窜以及symbian描述符之间的转化以TUint为中介进行, 在进行openC or C++的时候可能用的上。