1.当函数内返回的类型是一个TPtrC时,函数的返回类型也要写成TPtrC,不要使用const TDesC&。
1. %s,%S
格式化描述符时,使用%S,参数是描述符的地址.
buf.Format(_L("%S"),&aDesC);
buf.Format(_L("%s"),aDesC.Ptr());
TInt 用%d , TInt64是long long型的,用%LD
2.unicode,utf8
EscapeUtils
CnvUtfConverter
CCnvCharacterSetConverter
3.
转换成char串
char* p = (char *)buf8.Ptr();
从char串转换
char* cc = "aaaa";
TPtrC8 a;
a.Set( (const TUint8*)cc , strlen(cc) );
4.能得到类的构造参数,就可以转换了。
TChar ch=buf[0];
更多描述符转换
http://www.cppblog.com/franksunny/archive/2007/11/28/37469.aspx
5.
TBuf8 buf;
const char* str=(const char*)buf.Ptr();
结果,在str中因为缺少一个结束符,导致这样使用会出错。
要用内存拷贝来实现
const char* CStringUtil::TransformTDes8ToConstChar( const TDesC8 &src)
{
char *str = new char[src.Length() + 1];
memcpy(str, src.Ptr(), src.Length());
str[src.Length()] = 0;
return str;
}
在代码中使用printf,也可能会有内存泄露。
6. 有的是未验证过的,或使用量少的。
1.对TPtr或TPtrC的赋值不会重定向指针,要达到这个目的必须使用Set().
2.使用operate[]遍历代价是昂贵的,考虑使用c++指针算法和TDesC::Ptr()来代替。
3.HBufC也可以作为动态缓冲区来运用,但其不够灵活,在HBufC::ReAlloc调用以后,要重新将指向其的指针定位。SymbianC++封装的动态缓冲区类CBufFlat、CBufSeg和RBuf,这几个类可以解决以上问题。