请问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版本,编译目标等等信息。