WEB开发网
开发学院手机开发Symbian 开发 symbian 描述符 TBuf和const char*的转换 阅读

symbian 描述符 TBuf和const char*的转换

 2010-05-31 19:50:00 来源:WEB开发网   
核心提示:Buf和const char*的转换http://wiki.forum.nokia.com/index.php/How_to_Convert_TBuf_to_Char_and_Vice_VersaHow to Convert TBuf to Char and Vice VersaFrom Forum Nokia Wik

Buf和const char*的转换

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(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(aString));

_LIT(KMyPanicDescriptor, "My panic text");

__ASSERT_ALWAYS(User::StringLength(reinterpret_cast(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(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,

1 2  下一页

Tags:symbian 描述 TBuf

编辑录入:coldstar [复制链接] [打 印]
赞助商链接