Concatenare Due Stringhe In Symbian C++
#1
Inviato 23 maggio 2009 - 14:07
Come posso fare?
Vi scrivo ciò che ho scritto io così potete dirmi cosa correggere o dirmi un altro modo per concatenare due stringhe:
void classe::gocallL(){
char* a = "go_call-";
char* b = "123456";
char* c;
c = a+b --> c = "go_call-123456"
const TDesc8& d = _L©;
iSocket->Write(d);
}
Grazie in anticipo per gli eventuali aiuti.
#2
Inviato 23 maggio 2009 - 20:04
TBufC8<10> buf1 = _L8("go_call-");
TBufC8<10> buf2 = _L8("123456");
TBuf8<30> test = buf1;
test.Append(buf2);
Il risultato della concatenazione e' in test...
L'ho scritto "al volo", quindi spero di non aver fatto qualche errore...
Messaggio modificato da Il.Socio il 23 maggio 2009 - 20:05
#3
Inviato 24 maggio 2009 - 13:32
L'unica cosa che mi serve è solo un modo per convertire da HBufC* in char*
se lo hai.
In ogni caso grazie mille.
#5
Inviato 24 maggio 2009 - 15:16
in c++ "normale" usando le cstring può diventare anche :
CString stringa;
stringa = "prova";
stringa = stringa + " concatenazione";
Dipende tutto verso dove è orientato il linguaggio
#6
Inviato 24 maggio 2009 - 18:36
andreaandreanokia, il 24/05/2009 - 14:32, ha scritto:
L'unica cosa che mi serve è solo un modo per convertire da HBufC* in char*
se lo hai.
Figurati Andrea, e' sempre un piacere aiutare un "collega", quando possibile
Da HBufC* puoi ottenere un puntatore a TUint16*
HBufC* buf = HBufC::NewLC(10);
....
const TUint16* ptrInt = buf->Ptr();
Poi se vuoi, con un brutale cast, puoi usare il puntatore come riferimento a char*
char* ptrChar = (char*) ptrInt;
Se stai lavorando con le stringhe, prendi pero' in considerazione eventuali problematiche relative alla codifica UNICODE, in cui ciascun carattere occupa 2 char.
Se invece stai lavorando qualsiasi altro tipo di dato, allora e' meglio se usi un buffer HBufC8... buf->Ptr() restituira' un const TUint8* che dovrai poi castare a (char*)
Messaggio modificato da Il.Socio il 24 maggio 2009 - 18:37
#7
Inviato 24 maggio 2009 - 20:08
Ti spiego cosa succede:
for example text = "12345"
void class::goCallL(HBufC* text){
char* a1 = "go_call-";
const TText8* ptr= (TText8*)(text->Ptr());
const char* tmp = REINTERPRET_CAST(const char*, ptr);
TBufC8<15>buf1 = _L8(a1);
TBufC8<15>buf2 = _L8(tmp);
TBuf8<60>test01 = buf1;
TBuf8<60>test02 = buf2;
test01.Append(test02);
iSocket->Write(test01);
}
quello che risulta alla fine è:
test01 = "go_call-1"
invece io voglio:
test01 = "go_call-12345"
è solo questo il problema, sarà una fesseria ma non vedo cosa sbaglio.
#8
Inviato 24 maggio 2009 - 21:19
ti posto prima una possibile soluzione alternativa, piu' semplice... poi al max. indaghiamo insieme piu' con calma sul perche' di questo comportamento che stai osservando.
void class::goCallL(const TDesC& text)
{
TBuf<30> buf16 = _L("go_call-");
buf16.Append(text);
TBuf8<60> buf8;
buf8.Copy(text);
iSocket->Write(buf8);
}
Se hai un buffer HBufC* buf che devi passare a goCallL allora dovrai richiamarla cosi':
goCallL( buf->Des() ); <<<---- non sono certo che vada... nel caso in cui dovesse segnalare errore fai il passaggio indiretto che segue...
TPtr ptr = buf->Des();
goCallL( ptr );
Ma eventualmente puoi anche richiamarla con qualsiasi descrittore es:
goCallL( _L("12345") );
Messaggio modificato da Il.Socio il 24 maggio 2009 - 21:31
#9
Inviato 24 maggio 2009 - 22:08
Ti ringrazio tantissimo adesso funziona.
Sei stato utilissimo e gentilissimo.
Alla prossima.

Aiuto














Pubblicità