Pregunta

¿Cuál es la forma más fácil / preferida de manipular cadenas TDesC, por ejemplo, para obtener una subcadena?

Te daré un ejemplo de mi escenario.

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

Quiero obtener una subcadena de buf. Entonces, ¿quiero manipular el RBuf16 directamente y, de ser así, cuál es la mejor manera?

¿Hay alguna manera de convertir a const char * para que pueda usar la manipulación estándar de cadenas C.

Gracias de antemano

¿Fue útil?

Solución

Lea descriptors.blogspot.com (desplácese hacia abajo una vez cargado).

Puede usar TDes :: LeftTPtr, TDes :: RightTPtr o TDes :: MidTPtr que le dará una subcadena como TPtr (es decir, un descriptor que manipula los datos originales).

Puede usar la función TDes :: Copiar si desea crear una copia de su subcadena.

Otros consejos

Mejor o no, no puedo comentar, pero uso los siguientes métodos para extraer subcadenas de los descriptores:

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

o

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

con la diferencia entre los dos conjuntos de que el primero devuelve un nuevo descriptor modificable, el segundo, un nuevo descriptor no modificable, que contiene la subcadena.

Mientras desarrollas en la plataforma Symbian, te sugiero que sigas las convenciones de Symbian y no pienses en Symbian C ++ desde un punto de vista estándar de C o C ++ todo el tiempo. Utilice las bibliotecas que Symbian ha puesto a disposición específicamente, en lugar de las bibliotecas C / C ++ estándar que Symbian puede o no admitir directamente. Dado que el objetivo final de una aplicación desarrollada en Symbian es ejecutarse en un dispositivo móvil donde la confiabilidad y la solidez de las aplicaciones son las más importantes, debe atenerse a lo que Symbian prefiere y sugiere.

Si desea una subcadena de un RBuf16, eso es sencillo: simplemente use TDes16::MidTPtr

Puede convertir un const char * haciendo esto:

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

Sin embargo, lo que ahora tiene es una copia reducida de los datos originales. Si desea volver a configurar la etiqueta, deberá ampliarla (TDes16 :: Copy (const TDesC8 & amp;)) antes de usarla. Tratando de hacer que Symbian parezca "normal" C ++ con char * y wchar_t * realmente no funciona: el uso de descriptores está demasiado arraigado en el sistema operativo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top