Chinaunix首页 | 论坛 | 博客
  • 博客访问: 700745
  • 博文数量: 112
  • 博客积分: 2486
  • 博客等级: 大尉
  • 技术积分: 1541
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-14 18:30
文章分类

全部博文(112)

文章存档

2012年(5)

2011年(48)

2010年(26)

2009年(33)

我的朋友

分类: C/C++

2011-10-13 18:30:40

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++的时候可能用的
阅读(1718) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~