Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Il REDMAGIC Astra Gaming Tablet rappresenta una rivoluzione nel gaming portatile, combinando un display OLED da 9,06 pollici a 165Hz con il potente Snapdragon 8 Elite e un innovativo sistema di raffreddamento Liquid Metal 2.0 in un form factor compatto da 370 grammi. Si posiziona come il tablet gaming più completo della categoria, offrendo un'esperienza di gioco senza compromessi in mobilità.
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese di utilizzo intensivo e l'analisi di oltre 50 scatti, l'articolo offre una panoramica approfondita di Nintendo Switch 2. Vengono esaminate le caratteristiche che la definiscono, con un focus sulle nuove funzionalità e un riepilogo dettagliato delle specifiche tecniche che ne determinano le prestazioni
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: 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
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: 8155
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: 8155
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


Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Gigabyte Aero X16 Copilot+ PC: tanta potenza non solo per l'IA Gigabyte Aero X16 Copilot+ PC: tanta potenza non...
vivo X200 FE: il top di gamma si è fatto tascabile? vivo X200 FE: il top di gamma si è fatto ...
Driver più sicuri: Microsoft alza...
Ego Power+ ha la giusta accoppiata per l...
Scompiglio nei listini Amazon: prezzi im...
Sotto i 105€ il robot Lefant che lava, a...
Mini proiettori smart in offerta: uno co...
Smartwatch Amazfit in offerta: Balance o...
Windows XP ritorna: ecco come usarlo sub...
Arrow Lake in saldo: Intel taglia i prez...
LG C4 da 55'' a 899€ è il top per...
DJI Neo a 159€ è il mini drone pe...
Robot aspirapolvere DREAME D10 Plus Gen ...
A 109€ ha costretto Amazon a nuove scort...
Sbaraglia la concorrenza Intel, questo m...
Giappone all'attacco: ecco il primo wafe...
Cinema in Italia, svolta storica: arriva...
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: 23:06.


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