質問

サブストリングを取得するなど、TDesCストリングを操作するための好ましい/最も簡単な方法は何ですか?

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

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

bufから部分文字列を取得したい。 RBuf16を直接操作したいのであれば、どうすれば最良の方法ですか?

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

事前に感謝

役に立ちましたか?

解決

descriptors.blogspot.comを読み取ります(ロード後にスクロールダウンします)。

TDes :: LeftTPtr、TDes :: RightTPtr、またはTDes :: MidTPtrを使用して、サブストリングをTPtr(つまり、元のデータを操作する記述子)として使用できます。

サブストリングのコピーを作成する場合は、TDes :: Copy関数を使用できます。

他のヒント

最高かどうか、コメントすることはできませんが、次の方法を使用して記述子からサブストリングを抽出します。

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

または

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

2つのセットの違いは、前者が新しい変更可能な記述子を返し、後者がサブストリングを含む新しい変更不可能な記述子を返すことです。

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

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&))。 Symbianを「通常」に見せようとするchar *およびwchar_t *を使用したC ++は実際には機能しません-記述子の使用がOSに定着しすぎています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top