|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
Si...è stato dichiarato un buffer di 128 bit, ma non è stato riempito tutto,solo i primi 64 bit giusto???
E poi il buffer è stato dichiarato come char...è lo stesso di string??? |
|
|
|
|
|
#42 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dichiari un byte in più nel buffer, ci metti '\0' dentro e poi lo metti nella string.
|
|
|
|
|
|
#43 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
scusami non ho capito...devo dichiarare un buffer di 129 bit??e poi come faccio per passare da char a string???
|
|
|
|
|
|
#44 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se ci devi mettere un byte in più per il terminatore di stringa, sono 8 bit in più.
Comunque meglio sfruttare direttamente string. Codice:
string seed;
seed.resize(16, ' ');
unsigned int valore1 = ....;
unsigned int valore2 = ....;
//ci copi i dati sopra
for(int i = 0; i < 4; ++i)
{
seed[i] = (char)(valore1 & 0x0ff);
seed[4 + i] = (char)(valore2 & 0x0ff);
valore1 = valore1 >> 8;
valore2 = valore2 >> 8;
}
//dopo riempirai gli altri 64 bit con un hash dei primi 8 byte ad esempio
|
|
|
|
|
|
#45 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
scusami, le operazioni:
valore1 = valore1 >> 8; valore2 = valore2 >> 8; cosa fanno??? |
|
|
|
|
|
#46 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sono shift binari. Guarda il tuo manuale di reiferimento sugli operatori binari
|
|
|
|
|
|
#47 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
valore1 e valore2 vengono shiftati a destra rispettivamente di 8 byte...giusto??questo significa che il valore hash si troverà nei primi 64 bit???
Non riesco inoltre a capire l'istruzione: seed[i] = (char)(valore1 & 0x0ff); 0x0ff indica l'indirizzo?? |
|
|
|
|
|
#48 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Shiftati a destra di 8 bit
seed[i] = (char)(valore1 & 0x0ff); 0x0ff è la rappresentazione in esadecimale di un intero. 0x0ff implica avere tutti i primi 8 bit a 1. & è l'operatore di and binario Comunque sono tutte cose che in teoria dovresti sapere, visto che solitamente sono le prime cose che si fanno. |
|
|
|
|
|
#49 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
Si infatti..in teoria!!!
comunque adesso ci provo vediamo cosa ne esce fuori!!! |
|
|
|
|
|
#50 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
Se provo a fare sizeof(seed) mi viene dato come output 4...non dovrebbe darmi 16???
|
|
|
|
|
|
#51 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#52 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
si..è la variabile "seed" che hai definito nel codice sopra che si era settata a 16 byte con la funzione resize()
|
|
|
|
|
|
#53 |
|
Member
Iscritto dal: Dec 2009
Messaggi: 41
|
|
|
|
|
|
|
#54 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho spiegato. La memoria allocata da string viene allocata dinamicamente quindi sizeof non ti restituisce la dimensione 16, ma solo la quantità di memoria allocata staticamente.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:30.




















