Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-12-2009, 17:09   #1
ARGENTOVIVO81
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!!
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 17:25   #2
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8358
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
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 17:39   #3
ARGENTOVIVO81
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....
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 17:43   #4
ARGENTOVIVO81
Member
 
Iscritto dal: Nov 2009
Messaggi: 41
ho provato quanto mi hai detto..compare un errore "invalid conversion from "unsigned char*" to "const char*"
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 17:57   #5
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8358
castalo a char* e riprova come ti ho detto!

char a[] = "ARGENTOVIVO81 blablabla";
string b((char*)a);
__________________
System Failure
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 18:28   #6
ARGENTOVIVO81
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!!
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 18:36   #7
ARGENTOVIVO81
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...
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 18:37   #8
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8358
Probabilmente devi appendere al char[] il /0 che indica la fine!
__________________
System Failure
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 18:51   #9
ARGENTOVIVO81
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
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:08   #10
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:11   #11
ARGENTOVIVO81
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
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:13   #12
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:15   #13
ARGENTOVIVO81
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...
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:16   #14
ARGENTOVIVO81
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...
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:19   #15
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 19:59   #16
ARGENTOVIVO81
Member
 
Iscritto dal: Nov 2009
Messaggi: 41
Aggiungere il carattere di fine stringa significa solo dichiarare la variabile di 45 piuttosto che di 44???
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 20:00   #17
mrwinch
Senior Member
 
Iscritto dal: Mar 2006
Città: Mareno di Piave (TV)
Messaggi: 962
Quote:
Originariamente inviato da ARGENTOVIVO81 Guarda i messaggi
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
Nagra? Ndx? Propongo un altro punto di vista: cosa vorresti che facesse la tua funzione "string b((char*)RoundKey);"?
mrwinch è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 20:27   #18
ARGENTOVIVO81
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!!
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2009, 20:43   #19
ARGENTOVIVO81
Member
 
Iscritto dal: Nov 2009
Messaggi: 41
ho provato ad inserire il carattere di fine stringa, ma l'errore persiste!!!suggerimenti????
ARGENTOVIVO81 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2009, 19:11   #20
mrwinch
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*?
mrwinch è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Google perde la testa: AI Overview conso...
Anthropic presenta Claude Sonnet 5.5, e ...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
C'è un problema con i robot Tesla: i dip...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v