Question

Quel est le moyen préféré / le plus simple de manipuler des chaînes TDesC, par exemple pour obtenir une sous-chaîne.

Je vais vous donner un exemple de mon scénario.

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

Je veux obtenir une sous-chaîne de buf. Alors, est-ce que je veux manipuler le RBuf16 directement et si oui quel est le meilleur moyen?

Existe-t-il un moyen de convertir en const char afin que je puisse simplement utiliser la manipulation de chaîne en C standard.

Merci d'avance

Était-ce utile?

La solution

Lisez descriptors.blogspot.com (faites défiler l'écran une fois chargé).

Vous pouvez utiliser TDes :: LeftTPtr, TDes :: RightTPtr ou TDes :: MidTPtr qui vous donnera une sous-chaîne en tant que TPtr (c'est-à-dire un descripteur qui manipule les données d'origine).

Vous pouvez utiliser la fonction TDes :: Copy si vous souhaitez créer une copie de votre sous-chaîne.

Autres conseils

Meilleur ou non, je ne peux pas commenter, mais j'utilise les méthodes suivantes pour extraire les sous-chaînes des descripteurs:

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

ou

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

la différence entre les deux ensembles étant que le premier retourne un nouveau descripteur modifiable, le dernier, un nouveau descripteur non modifiable, contenant la sous-chaîne.

Pendant que vous développez sur la plate-forme Symbian, je vous conseillerais vivement de suivre les conventions Symbian et de ne pas penser à Symbian C ++ d'un point de vue C ou C ++ standard. Utilisez les bibliothèques que Symbian a spécifiquement rendues disponibles, au lieu des bibliothèques standard C / C ++ que Symbian peut ou non prendre en charge directement. L'objectif ultime d'une application développée sur Symbian étant de s'exécuter sur un appareil mobile où la fiabilité et la robustesse des applications sont primordiales, vous devez vous en tenir à ce que Symbian préfère et suggère.

Si vous voulez une sous-chaîne d'un RBuf16, c'est simple - utilisez simplement TDes16 :: MidTPtr

Vous pouvez convertir un caractère constant * en procédant ainsi:

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

Cependant, ce que vous avez maintenant est une copie restreinte des données d'origine. Si vous souhaitez maintenant redéfinir le libellé, vous devez l'élargir avant d'utiliser (TDes16 :: Copy (const TDesC8 & amp;)). Essayer de faire ressembler Symbian à " normal " C ++ avec char * et wchar_t * ne fonctionne pas vraiment - l'utilisation de descripteurs est trop enracinée dans le système d'exploitation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top