[C++] (Symbian) Een int in een _LIT8 krijgen

Pagina: 1
Acties:

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
OK, ik weet het even niet meer...

Het gaat hier dus om C++ op een Symbian 6.1 apparaat.

Via onderstaande code kan je dus de string (nouja, char[]) "UPD 46012311" over een socket connectie sturen.
code:
1
2
3
_LIT8(KData, "UPD 46012311 ");
TBufC8<32> str(KData);
iSocketsEngine->WriteL(str);

Dat werkt ook allemaal prima. En nu 1 gemeen dingetje. Ik heb een simpele int genaamd cell. Nu moet cell aan het eind van de string meegenomen worden. Met een
<stringvar>.Format(_L("UPD 46012311" %d"), CellId) lukt het niet, want dat is dus allen bij een TBuf32. En die slikt de socket niet. Bovendien moet ie aan de LIT8 voldoen.

Mijn vraag is dus: Hoe krijg ik de string + int value in een TBufC8?

Het is een hele korte start post, ongetwijfeld een doodsimpel probleem, maar ik heb 3 uur hier aan gezeten, alle casts langs gegaan en weet het echt ff niet meer..

Het probleem is ook dat de API (voor zover aanwezig) vreselijk summier is met Descriptors

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het kan lijkt mij toch gewoon met een functie als sprintf, of bijvoorbeeld het maken van een std::ostringstream waar je uiteindelijk de charbuffer van opvraagt?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
Klopt. Maar om de een of andere vage reden wil hij stdio.h niet includen (ook niet als ik de lib erbij link)

Het is ook een erg uitgeklede versie van c++, dat symbian (logisch, het zijn maar kleine telefoontjes :))

[ Voor 1% gewijzigd door Sn3akz op 16-01-2005 17:43 . Reden: typo ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik kan me niet voorstellen dat sprintf er niet bij zit, het is toch wel de standaard C manier om getallen in een string te formatteren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
OK.. sprintf doet het. Maar ik krijg 2 vage warnings :( (Ik haaat deze SDK)

code:
1
2
3
4
5
unsigned char buff[32];
sprintf(buff, "UPD 46012311 %u", CellId);
_LIT8(KData,(unsigned char)buff);
TBufC8<32> str(KData);
iSocketsEngine->WriteL(str);

Ik krijg dan 2 warnings:
Lkpappui.cpp:128: warning: implicit declaration of function `int sprintf(...)'
Lkpappui.cpp:130: warning: aggregate has a partly bracketed initializer

Je kan toch gewoon zonder problemen sprintf aanroepen? :?

De onderste warning wordt alleen gegeven als er nog on-ge-escapde % tekens in staan. Dat betekend dus dat sprintf z'n werk niet doet? vaag?

[ Voor 28% gewijzigd door Sn3akz op 17-01-2005 02:08 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
De eerste melding betekent dat je compiler niet eens een C compiler is :/ Aangenomen dat je inderdaad een #include <stdio.h> hebt. Overigens klopt je cast op regel 3 niet.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
MSalters schreef op maandag 17 januari 2005 @ 09:38:
De eerste melding betekent dat je compiler niet eens een C compiler is :/ Aangenomen dat je inderdaad een #include <stdio.h> hebt. Overigens klopt je cast op regel 3 niet.
Het is ook geen standaard C compiler. Het is een Symbian SDK.

Die cast op regel 3 kan ook een (char) zijn. Het feit is dat ik hem moet casten van een unsigned char* naar een unsigned char. Als ik de cast weg haal, struikelt hij weer over die warning. Het is net alsof het elkaar allemaal tegenhoudt :(

En als ie niet klopt volgens jou, hoe moet het dan wel?

Volgende probeersel (Ik ben gewoon aan het zoeken wat allemaal wel en niet wil)
code:
1
2
3
4
5
6
7
8
9
10
TBuf<32> upd_string;
upd_string.Format(_L("UPD 46012311 %d"), CellId);

unsigned char buff[32];
for (int i =0; i<32; i++)
{
     buff[i] = upd_string[i];
}
_LIT8(KData, (char) buff);
TBufC8<32> str(KData);


Nu krijg ik dus weer de foutmelding die ik eerst doorgehaald had. :(

[ Voor 28% gewijzigd door Sn3akz op 17-01-2005 11:19 . Reden: Enorme toevoeging ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Sn3akz schreef op maandag 17 januari 2005 @ 11:13:
[...]
Het is ook geen standaard C compiler. Het is een Symbian SDK.

Die cast op regel 3 kan ook een (char) zijn. Het feit is dat ik hem moet casten van een unsigned char* naar een unsigned char. Als ik de cast weg haal, struikelt hij weer over die warning. Het is net alsof het elkaar allemaal tegenhoudt :(
Nee hoor. Normaal gesproken geef je een "" mee, dat is een char[] (dus een array) en dat wordt automatisch een char* (pointer naar array), maar nooit een enkele char.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
Ik heb het gelukkig kunnen oplossen:

Een TDes8 gebruiken ipv een TDesC8

in tegenstelling tot een TDesC8 is een TDes8 WEL veranderbaar. In dat geval zijn er wat handige functies voor handen.
code:
1
2
3
4
5
6
_LIT8(KData, "UPD 46012311 ");
TBuf8<32> str(KData);
str.AppendNum(CellId);
str.Append('\r');
str.Append('\n');
iSocketsEngine->WriteL(str);

Werkt als een zonnetje. Het probleem is dus dat ik niet wist dat de socket ook TDes8 slikte. Ik dacht dus dat het perse non-modifiable moest zijn :( Domme ikke...
Pagina: 1