2

部分文字列を取得するなど、TDesC 文字列を操作するための推奨/最も簡単な方法は何ですか。

私のシナリオの例を挙げます。

RBuf16 buf;
...
CEikLabel label;
...
label->SetTextL(buf); // (SetTextL takes a const TDesC&)

buf から部分文字列を取得したい。では、RBuf16 を直接操作したいのですか? もしそうなら、最善の方法は何ですか?

標準の C 文字列操作を使用できるように、const char* に変換する方法はありますか。

前もって感謝します

4

3 に答える 3

2

descriptors.blogspot.com を読みます (ロードしたら下にスクロールします)。

部分文字列を TPtr (つまり、元のデータを操作する記述子) として提供する TDes::LeftTPtr、TDes::RightTPtr、または TDes::MidTPtr を使用できます。

部分文字列のコピーを作成する場合は、TDes::Copy 関数を使用できます。

于 2008-12-02T15:42:43.130 に答える
2

良くも悪くもコメントはできませんが、次の方法を使用して記述子から部分文字列を抽出します。

TDes::LeftTPtr()
TDes::MidTPtr()
TDes::RightTPtr()

また

TDesC::Left()
TDesC::Mid()
TDesC::Right()

2 つのセットの違いは、前者は新しい変更可能な記述子を返し、後者は部分文字列を含む新しい変更不可能な記述子を返すことです。

Symbian プラットフォームで開発している間は、Symbian の規則に従うことを強くお勧めします。標準的な C または C++ の観点から常に Symbian C++ を考えないようにしてください。Symbian が直接サポートする場合とサポートしない場合がある標準の C/C++ ライブラリの代わりに、Symbian が特別に提供しているライブラリを使用してください。Symbian で開発されたアプリケーションの最終的な目標は、アプリケーションの信頼性と堅牢性が最も重要なモバイル デバイスで実行することであるため、Symbian が好み、提案するものに固執する必要があります。

于 2008-12-02T15:45:40.440 に答える
1

RBuf16 から部分文字列が必要な場合、それは簡単です。TDes16::MidTPtr

これを行うことで const char* を変換できます。

TPtr8 narrowBuf;

// Create a buffer with enough space to store every character, plus one for 
// a null terminator
narrowBuf.AllocL( buf.Length() + 1);

// TPtr8::Copy accepts a TDesC16 
narrowBuf.Copy( buf );

// Append a null terminator and return a pointer to the resultant data
const char* ptr = (const char*)narrowBuf.PtrZ();

ただし、現在あるのは、元のデータの縮小されたコピーです。ラベルを再度設定する場合は、使用する前に幅を広げる必要があります (TDes16::Copy(const TDesC8&))。char* と wchar_t* を使用して Symbian を「通常の」C++ のように見せようとしても、実際には機能しません。記述子の使用は OS に定着しすぎています。

于 2008-12-02T15:45:40.457 に答える