Pergunta

O que é a maneira preferida / mais fácil de manipular cordas TDesC, por exemplo, para obter uma substring.

Vou dar-lhe um exemplo de meu cenário.

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

Eu quero conseguir um substring de buf. Então, eu quero manipular o RBuf16 diretamente e em caso afirmativo, qual é a melhor maneira?

Existe uma maneira de converter para const char * para que eu possa usar apenas a manipulação de cadeia C padrão.

Agradecemos antecipadamente

Foi útil?

Solução

Leia descriptors.blogspot.com (scroll para baixo uma vez carregado).

Você pode usar TDES :: LeftTPtr, TDES :: RightTPtr ou TDES :: MidTPtr que lhe dará uma substring como um TPtr (ou seja, um descritor que manipula os dados originais).

Você pode usar os TDES :: Função de cópia se você quiser criar uma cópia de seu substring.

Outras dicas

Melhor ou não, eu não posso comentar, mas eu utilizar os seguintes métodos para extrair sub-cordas de descritores:

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

ou

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

com a diferença entre os dois conjuntos, sendo que o primeiro retorna um novo descritor modificável, este último, um novo descritor não modificável, contendo o sub-string.

Enquanto você desenvolver na plataforma Symbian, eu sugeriria altamente seguir as convenções Symbian, e não pensar em Symbian C ++ a partir de um padrão C ou ponto C ++ de vista o tempo todo. Use as bibliotecas que Symbian fez especificamente disponível, em vez de bibliotecas padrão C / C ++ que Symbian pode ou não pode apoiar directamente. Uma vez que o objetivo final de um aplicativo desenvolvido no Symbian é para ser executado em um dispositivo móvel, onde a confiabilidade e robustez de aplicações importa mais, você deve ficar com o que Symbian prefere e sugere.

Se você quer uma substring de uma RBuf16, isso é simples - basta usar TDes16::MidTPtr

Você pode converter um const char *, fazendo isso:

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

No entanto, o que você tem agora um é uma cópia estreitou dos dados originais. Se você quiser definir agora o rótulo de novo, você vai precisar para alargá-la (TDes16 :: Copy (const TDesC8 &)) antes do uso. Tentando fazer olhar Symbian como "normal" C ++ com char * e wchar_t * realmente não funciona -. O uso de descritores é muito enraizada no OS

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top