当前位置: 代码迷 >> Symbian >> 请教TBUF如何样转换为char*类型
  详细解决方案

请教TBUF如何样转换为char*类型

热度:2729   发布时间:2013-02-26 00:00:00.0
请问TBUF怎么样转换为char*类型
我知道TBUF8可以通过以下代码转换
TBuf8 <256> utf8;
int   len   =   strlen((char*)utf8.PtrZ());
char   *p   =   (char   *)malloc(sizeof(char)*(len+1));
strcpy(p,(char*)utf8.PtrZ());   //   不要用   p   =   a;
但是使用TBuf的时候只能保存第一个字符而已
我用的是unicode编码,想使用TBuf请问有没有高手可以指点一下,谢谢了

------解决方案--------------------------------------------------------
TBuf8 <> To char*之间的转换 TBuf8 <20> tbuf8;
tbuf8.Zero();
tbuf8.Copy();
tbuf8.ZeroTerminate();//记得一定要加这一句,因为描述符没有结尾.
char ch[20] = {0};
strcpy(ch, (const char*)tbuf8.Ptr());
TDes To TBuf8之间的转换:
TBuf8 <10> tbuf8;
tbuf8.Copy(TDes);
也就是说,直接Copy就可以。
------解决方案--------------------------------------------------------
TBuf16 <16> buf;
buf.Copy(_L( "aaa "));
char p[16]
for (int i = 0; i < buf.Length(); i++)
{
p[i] = buf[i];
}
------解决方案--------------------------------------------------------
两个问题,分开回答:
1.你用的TBuf8保存unicode是有问题的,unicode又称为UTF16,最小编码位是16位,也就是说,你的一个TBuf8单元,只保存了半个unicode字符。TBuf8一般用来存ascii,或者UTF8编码方式的字符。如果是unicode,最好使用TBuf16来保存。
TBuf8到char*之间的转换,可以直接用TDes里面的接口Ptr或者PtrZ两个接口。这两个接口的区别是,Ptr不会给你的内存空间添加 '\0 '结尾。PtrZ会添加一个 '\0 '结尾。后者更符合c的字符串规则。但是要注意,调用PtrZ的时候,会给你的TBuf8增加一个单位长度。

2.symbian系统的自带宏,__WINS__表示是模拟器版本执行的代码。如果你把代码编译成GCCE或者armi版本,那段代码就会被执行。你可以用symbian带的宏检查sdk版本,编译目标等等信息。
  相关解决方案