Nokioteca [Nokia] Forum: Concatenare Due Stringhe In Symbian C++ - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

Concatenare Due Stringhe In Symbian C++

#1 L   andreaandreanokia 

  • Newbie
  • Punto
  • Gruppo: Utente
  • Messaggi: 6
  • Iscritto: 13 maggio 2009

Inviato 23 maggio 2009 - 14:07

Salve, ho creato una textbox e adesso dovrei concatenare due stringhe di tipo char o di tipo TDesc8.
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.
0

#2 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7141
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 23 maggio 2009 - 20:04

Ti puo' stare bene una cosa del genere?

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

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#3 L   andreaandreanokia 

  • Newbie
  • Punto
  • Gruppo: Utente
  • Messaggi: 6
  • Iscritto: 13 maggio 2009

Inviato 24 maggio 2009 - 13:32

Oltre che velocissimo sei stato anche gentilissimo e per questo ti ringrazio.
L'unica cosa che mi serve è solo un modo per convertire da HBufC* in char*
se lo hai.
In ogni caso grazie mille.
0

#4 L   noki57oo 

  • Millennium Member
  • Gruppo: Modder
  • Messaggi: 1881
  • Iscritto: 22 giugno 2008
  • Località:verona
  • Cellulare:N8
  • Firmware:Belle by noki57oo

Inviato 24 maggio 2009 - 13:33

che casino il C++
0

#5 L   sancios 

  • Millennium Member
  • Gruppo: Vip Member
  • Messaggi: 7587
  • Iscritto: 18 gennaio 2006
  • Località:Corsico (MI)
  • Cellulare:iPhone2g-4
  • Firmware:3.1.3 - 4.3.5

Inviato 24 maggio 2009 - 15:16

quello non è c++ puro o meglio è orientato al symbian

in c++ "normale" usando le cstring può diventare anche :

CString stringa;
stringa = "prova";
stringa = stringa + " concatenazione";

Dipende tutto verso dove è orientato il linguaggio :P
0

#6 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7141
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 24 maggio 2009 - 18:36

Visualizza Messaggiandreaandreanokia, il 24/05/2009 - 14:32, ha scritto:

Oltre che velocissimo sei stato anche gentilissimo e per questo ti ringrazio.
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 :unsure:

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

0

#7 L   andreaandreanokia 

  • Newbie
  • Punto
  • Gruppo: Utente
  • Messaggi: 6
  • Iscritto: 13 maggio 2009

Inviato 24 maggio 2009 - 20:08

Pensavo di provare la conversione per risolvere un problema o meglio per capire cosa cambiava.
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.
0

#8 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7141
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 24 maggio 2009 - 21:19

uau... ti stai complicando la vita in maniera notevole...
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

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#9 L   andreaandreanokia 

  • Newbie
  • Punto
  • Gruppo: Utente
  • Messaggi: 6
  • Iscritto: 13 maggio 2009

Inviato 24 maggio 2009 - 22:08

:D In effetti era molto più semplice ehehe chissà dove andavo a sbattere se continuavo a correggere quello che stavo facendo.
Ti ringrazio tantissimo adesso funziona.
Sei stato utilissimo e gentilissimo.
Alla prossima.
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione