PDA

View Full Version : [c\c++] inizializzazione stringa


mamo139
13-12-2008, 13:33
char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00"; //0->9
+ "\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06"; //10->23
+ "\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00"; //24->37
+ "\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00"; //38->52
+ "\x00\x00"; //52->54


così è bello da vedere ma non funziona, come mai??
se invece prendo tutti i valori e li metto in fila indiana funziona....
:cry:
come posso fare?

grazie mille

tglman
13-12-2008, 15:00
stai programmando in c++ nn in java!!!
nn esiste l'operator + per i char[] (anzi mesa che nn esiste manco in java l'operator + per i char[])

comunque devi fare in modo di mettere tutto su una linea !

oppure fare l'escape del'invio!

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00\
\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06\
\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00";

mamo139
13-12-2008, 15:30
stai programmando in c++ nn in java!!!
nn esiste l'operator + per i char[] (anzi mesa che nn esiste manco in java l'operator + per i char[])

comunque devi fare in modo di mettere tutto su una linea !

oppure fare l'escape del'invio!

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00\
\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06\
\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00";


proprio quello che volevo, grazie ;)

tomminno
13-12-2008, 18:30
Se non hai sbagliato a postare il codice, è sbagliato l'operatore somma, tra l'altro applicato senza uno degli operatori.
Dovresti usare strcat:

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00"; //0->9
strcat(buffer,"\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06"); //10->23
strcat(buffer,"\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00"); //24->37
strcat(buffer,"\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00"); //38->52
strcat(buffer,"\x00\x00"); //52->54

fero86
13-12-2008, 18:37
Dovresti usare strcat:

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00"; //0->9
strcat(buffer,"\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06"); //10->23
strcat(buffer,"\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00"); //24->37
strcat(buffer,"\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00"); //38->52
strcat(buffer,"\x00\x00"); //52->54

no, perché in questo caso strcat sega tutto quello che viene dopo uno zero, che invece va mantenuto; ad esempio, la seconda linea la concatenerebbe alla prima tagliando via gli ultimi 5 bytes della prima. in generale strcat lavora con stringhe null-terminated, quindi non va bene con gli array di bytes contenenti anche zeri.

DanieleC88
14-12-2008, 03:27
no, perché in questo caso strcat sega tutto quello che viene dopo uno zero, che invece va mantenuto; ad esempio, la seconda linea la concatenerebbe alla prima tagliando via gli ultimi 5 bytes della prima. in generale strcat lavora con stringhe null-terminated, quindi non va bene con gli array di bytes contenenti anche zeri.
Esatto, conoscendone a priori la lunghezza è preferibile memcpy() se ci sono zeri.

mamo139
14-12-2008, 10:35
secondo me la soluzione piu comodo è questo ora che la conosco:


char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00" \
"\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06" \
"\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
"\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00" \
"\x00\x00";

tglman
14-12-2008, 14:10
occhio al doppio apice ;)
è cosi:

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00\
\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06\
\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00";

e nn cosi :

char buffer [55] = "\x42\x4d\x36\x39\xb1\x00\x00\x00\x00\x00" \
"\x36\x00\x00\x00\x28\x00\x00\x00\xe0\x08\x00\x00\xa8\x06" \
"\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
"\xc4\x0e\x00\x00\xc4\x0e\x00\x00\x00\x00\x00\x00\x00\x00" \
"\x00\x00";

mamo139
14-12-2008, 14:20
mmhhh capito... ;)
però a me funziona anche con il doppio apice:p