symbian基本数据类型转化汇集(一)
2008-07-17 14:50
417 查看
每次碰都数据类型转换都头大,在网上乱搜一通才能搞定,特把搜到的有关基本数据类型转化的做个集合,以方便以后查找。
----------------------------------------------------
转:http://blog.csdn.net/9527/archive/2006/08/29/1137637.aspx
1.串转换成数字
TBuf16<20> buf(_L( "123" ) );
TLex lex( buf );
TInt iNum;
lex.Val( iNum );
2.数字转换成串
TBuf16<20> buf;
TInt iNum = 20;
buf.Format( _L( "%d" ) , iNum );
3.将symbian串转换成char串
char* p = NULL;
TBuf8<20> buf( _L( "aaaaa" ) );
p = (char *)buf.Ptr();
4.UTF-8转换成UNICODE
CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 );
5.UNICODE转换成UTF-8
CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 );
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的接收的数据是接收函数自己分配的时候。
-----------------------------------------------------------------
http://wiki.forum.nokia.com/index.php/How_to_Convert_TBuf_to_Char_and_Vice_Versa
Usage:
Problem with the code above is that defining a TBuf not large enough will raise a USER 23 panic.
Some ways to avoid this include:
Using either __ASSERT_DEBUG or __ASSERT_ALWAYS, depending on your needs. Note that you can use alternatives to User::Panic(), as long as you avoid executing sensitive code.
The other way is relying on a dynamic buffer, using HBufC for instance:
Note that the caller is responsible of freeing the HBufC returned. Also note the trailing "L" in the function's name.
Depending on your code, you may prefere one of these over the others. Also, you may need to add extra checks (for instance, checking whether the char pointer is null or not).
Converting descriptors to C-strings may be done this way:
----------------------------------------------------
转:http://blog.csdn.net/9527/archive/2006/08/29/1137637.aspx
1.串转换成数字
TBuf16<20> buf(_L( "123" ) );
TLex lex( buf );
TInt iNum;
lex.Val( iNum );
2.数字转换成串
TBuf16<20> buf;
TInt iNum = 20;
buf.Format( _L( "%d" ) , iNum );
3.将symbian串转换成char串
char* p = NULL;
TBuf8<20> buf( _L( "aaaaa" ) );
p = (char *)buf.Ptr();
4.UTF-8转换成UNICODE
CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 );
5.UNICODE转换成UTF-8
CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 );
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的接收的数据是接收函数自己分配的时候。
-----------------------------------------------------------------
http://wiki.forum.nokia.com/index.php/How_to_Convert_TBuf_to_Char_and_Vice_Versa
How to Convert TBuf to Char and Vice Versa
From Forum Nokia Wiki
void stringToDescriptor(const char* aString, TDes& aDescriptor) { TPtrC8 ptr(reinterpret_cast<const TUint8*>(aString)); aDescriptor.Copy(ptr); }
Usage:
const char* str = "Hello, world!"; TBuf<32> buffer; // Make it large enough for str stringToDescriptor(str, buffer);
Problem with the code above is that defining a TBuf not large enough will raise a USER 23 panic.
Some ways to avoid this include:
Using either __ASSERT_DEBUG or __ASSERT_ALWAYS, depending on your needs. Note that you can use alternatives to User::Panic(), as long as you avoid executing sensitive code.
void stringToDescriptor(const char* aString, TDes& aDescriptor) { TPtrC8 ptr(reinterpret_cast<const TUint8*>(aString)); _LIT(KMyPanicDescriptor, "My panic text"); __ASSERT_ALWAYS(User::StringLength(reinterpret_cast<const TUint8*>(aString)) <= aDescriptor.MaxLength(), User::Panic(KMyPanicDescriptor, 0)); aDescriptor.Copy(ptr); }
The other way is relying on a dynamic buffer, using HBufC for instance:
HBufC* stringToDescriptorL(const char* aString) { TPtrC8 ptr(reinterpret_cast<const TUint8*>(aString)); HBufC* buffer = HBufC::NewL(ptr.Length()); buffer->Des().Copy(ptr); return buffer; }
Note that the caller is responsible of freeing the HBufC returned. Also note the trailing "L" in the function's name.
Depending on your code, you may prefere one of these over the others. Also, you may need to add extra checks (for instance, checking whether the char pointer is null or not).
Converting descriptors to C-strings may be done this way:
const char* descriptorToStringL(const TDesC& aDescriptor) { TInt length = aDescriptor.Length(); HBufC8* buffer = HBufC8::NewLC(length); buffer->Des().Copy(aDescriptor); char* str = new(ELeave) char[length + 1]; Mem::Copy(str, buffer->Ptr(), length); str[length] = '/0'; CleanupStack::PopAndDestroy(buffer); return str; }
--------------------------------------------------
相关文章推荐
- symbian基本数据类型转化汇集(二)
- symbian基本数据类型转化汇集(三)
- 基本数据类型的相互转换 int float NSinteger double 的相互转化
- javascript对象转化为基本数据类型规则
- Java之——基本数据类型与byte数组相互转化
- Java基本数据类型转化总结
- Java的基本数据类型与转化
- java中基本数据类型的转化和强制类型转换浅谈
- Java基础知识---基本数据类型及类型转化
- Lua 函数参数万能转化基本数据类型
- OC中的迭代器 值对象(把基本数据类型转化为对象类型)
- java字符串之基本数据类型与字符串的转化
- iOS Json和对象互转(反射支持对象嵌套的复杂对象类型,支持基本数据类型和NSDate属性转化)
- 字符串和基本数据类型之间的相互转化
- Nokia官方培训(Symbian 4300)笔记(四)--基本数据类型及命名规范
- Java基本数据类型的数据转化为字节数据的方法
- Symbian的基本数据类型
- Java的包装类,基本数据类型和String类之间的转化
- 【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法
- Java之——基本数据类型与byte数组相互转化