|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
[C++] conversione da unsigned char a string
Salve,
come faccio a trasformare una variabile unsigned char[] in string??? Ho provato con std::string s (reinterpret_cast<const char*> (nome variabile unsigned char), dimensione) ma appena eseguo il programma va in errore!! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 8155
|
Tu hai un vettore di char cioè un char[]. String ha un costruttore di tipo implicito quindi puoi direttamente dare il comando string frase(<vettore di char>) cioè:
Codice:
char a[] = "ARGENTOVIVO81 blablabla"; string b(a);
__________________
System Failure ![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
char a[] è lo stesso di unsigned char a[]?????
perche' a me serve convertire unsigned char in string e non char.... ![]() |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
ho provato quanto mi hai detto..compare un errore "invalid conversion from "unsigned char*" to "const char*"
![]() ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 8155
|
castalo a char* e riprova come ti ho detto!
char a[] = "ARGENTOVIVO81 blablabla"; string b((char*)a);
__________________
System Failure ![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
adesso compila!!ma se mando in esecuzione il programma compare come errore "invalid next size (fast): 0x0804c140"e poi si interrompe!!
![]() |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
puo' essere che è legato al fatto che all'inizio la funzione prende in input una stringa che trasformo in unsigned char con la seguente istruzione???
unsigned char Key [16]; string s; memcpy (Key, s.c_str(),16); Successivamente Key viene elaborata ed è questa che alla fine devo riconvertire in stringa... |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 8155
|
Probabilmente devi appendere al char[] il /0 che indica la fine!
__________________
System Failure ![]() |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
scusa la mia poca esperienza, come faccio ad inserire /0 che indica la fine??
dovrei fare: Key[17]= '/0'; ?? perche' se è cosi' mi da sempre lo stesso errore di invalid next size ![]() ![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è ualche motivo per cui hai dichiarato key unsigned char ? Ricordati che in key non ci possono essere byte pari a zero, altrimenti viene interpretato come il carattere di fine stringa.
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
Questa è la funzione che utilizzo:
string KeyExpansion(string s) { int i,j; unsigned char temp[4],k; memcpy (Key,s.c_str(),16); for(i=0;i<Nk;i++) { RoundKey[i*4]=Key[i*4]; RoundKey[i*4+1]=Key[i*4+1]; RoundKey[i*4+2]=Key[i*4+2]; RoundKey[i*4+3]=Key[i*4+3]; } while (i < (Nb * (Nr+1))) { for(j=0;j<4;j++) { temp[j]=RoundKey[(i-1) * 4 + j]; } if (i % Nk == 0) { { k = temp[0]; temp[0] = temp[1]; temp[1] = temp[2]; temp[2] = temp[3]; temp[3] = k; } { temp[0]=getSBoxValue(temp[0]); temp[1]=getSBoxValue(temp[1]); temp[2]=getSBoxValue(temp[2]); temp[3]=getSBoxValue(temp[3]); } temp[0] = temp[0] ^ Rcon[i/Nk]; } RoundKey[i*4+0] = RoundKey[(i-Nk)*4+0] ^ temp[0]; RoundKey[i*4+1] = RoundKey[(i-Nk)*4+1] ^ temp[1]; RoundKey[i*4+2] = RoundKey[(i-Nk)*4+2] ^ temp[2]; RoundKey[i*4+3] = RoundKey[(i-Nk)*4+3] ^ temp[3]; i++; } string b((char*)RoundKey); } RoundKey è definita come unsigned char RoundKey[44], mentre Key come unsigned char Key[16] Senza l'struzione : string b((char*)RoundKey); il programma gira, appena la inserisco compare l'errore free() invalid size fast ![]() ![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Manca il carattere di fine stringa. Quello è fuori dubbio. Devi quindi dichiarare il vettore di 17 elementi invece di 16.
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
no...non c'è un motivo particolare per cui l'ho dichiarato unsigned char!!!Facendo la stampa a video ho comunque visto che non ci sono byte pari a zero...
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
Anche RoundKey lo devo dichiarare di 45 invece che di 44??
comunque gia' ho provato ma non capisco perche' l'errore persiste... |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vedendo il codice è solo RoundKey che viene passata alla stringa, allora devia aggiungere il carattere di fine stringa solo a quella.
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
Aggiungere il carattere di fine stringa significa solo dichiarare la variabile di 45 piuttosto che di 44???
![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Mar 2006
Città: Mareno di Piave (TV)
Messaggi: 962
|
Quote:
|
|
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
vorrei solo copiare la variabile "RoundKey" nella stringa "b" in modo tale da potere passare "b" ad altre funzioni per essere elaborata!!
![]() |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Nov 2009
Messaggi: 41
|
ho provato ad inserire il carattere di fine stringa, ma l'errore persiste!!!suggerimenti????
![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2006
Città: Mareno di Piave (TV)
Messaggi: 962
|
Ma sei obbligato ad usare un char*? Perchè non usare il nativo unsigned char*?
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:06.