Domanda

Qual è il modo preferito / più semplice per manipolare le stringhe TDesC, ad esempio per ottenere una sottostringa.

Ti darò un esempio del mio scenario.

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

Voglio ottenere una sottostringa da buf. Quindi voglio manipolare direttamente RBuf16 e, in caso affermativo, qual è il modo migliore?

Esiste un modo per convertire in const char * in modo che io possa semplicemente usare la manipolazione standard della stringa C.

Grazie in anticipo

È stato utile?

Soluzione

Leggi descriptors.blogspot.com (scorri verso il basso una volta caricato).

Puoi usare TDes :: LeftTPtr, TDes :: RightTPtr o TDes :: MidTPtr che ti darà una sottostringa come TPtr (cioè un descrittore che manipola i dati originali).

È possibile utilizzare la funzione TDes :: Copia se si desidera creare una copia della sottostringa.

Altri suggerimenti

Meglio o no, non posso commentare, ma utilizzo i seguenti metodi per estrarre sottostringhe dai descrittori:

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

o

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

con la differenza tra i due set che il primo restituisce un nuovo descrittore modificabile, il secondo un nuovo descrittore non modificabile, contenente la sottostringa.

Mentre sviluppi sulla piattaforma Symbian, suggerirei vivamente di seguire le convenzioni Symbian e di non pensare sempre al Symbian C ++ da un punto di vista C o C ++ standard. Utilizzare le librerie che Symbian ha reso specificamente disponibili, anziché le librerie C / C ++ standard che Symbian può o non può supportare direttamente. Poiché l'obiettivo finale di un'applicazione sviluppata su Symbian è l'esecuzione su un dispositivo mobile in cui l'affidabilità e la robustezza delle applicazioni contano di più, è necessario attenersi a ciò che Symbian preferisce e suggerisce.

Se vuoi una sottostringa da un RBuf16, è semplice: usa TDes16::MidTPtr

Puoi convertire un carattere const * facendo questo:

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

Tuttavia, ciò che hai ora è una copia ristretta dei dati originali. Se si desidera ora impostare nuovamente l'etichetta, è necessario ampliarla (TDes16 :: Copia (const TDesC8 & amp;)) prima dell'uso. Cercare di rendere Symbian simile a "normale" C ++ con char * e wchar_t * non funziona davvero - l'uso di descrittori è troppo radicato nel sistema operativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top