Symbian C ++ - 디스크립터의 하위 문자열 작업
문제
예를 들어 서브 스트링을 얻기 위해 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 :: 복사 기능을 사용할 수 있습니다.
다른 팁
최고 여부에 대해서는 언급 할 수 없지만 다음 방법을 사용하여 디스크립터에서 하위 스트링을 추출합니다.
TDes::LeftTPtr()
TDes::MidTPtr()
TDes::RightTPtr()
또는
TDesC::Left()
TDesC::Mid()
TDesC::Right()
두 세트 사이의 차이는 전자가 새로운 수정 가능한 디스크립터를 반환한다는 것입니다. 후자는 서브 스트링을 포함하는 새로운 수정 불가능한 설명 자입니다.
당신이 Symbian 플랫폼을 개발하는 동안, 나는 Symbian 컨벤션을 따르고, 표준 C 또는 C ++ 관점에서 Symbian 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에서 너무 강력합니다.