View Full Version : [C] valore contenuto in un array
starsky.78
17-10-2007, 08:10
Ciao a tutti, il mio problema e' questo: avendo un array di char, poniamo di 3 elementi a[0]=0x32 a[1]=0x12 a[2]=0x3D, come posso fare per raggruppare i 3 byte e convertire in decimale il relativo valore? (cioe' 32123D in decimale = 3.281.469).
Grazie a tutti,
Davide.
edit: ops... stavo scrivendo un'altra cosa :asd: poi ti rispondo seriamente se mi ricordo di ripassare
Ciao a tutti, il mio problema e' questo: avendo un array di char, poniamo di 3 elementi a[0]=0x32 a[1]=0x12 a[2]=0x3D, come posso fare per raggruppare i 3 byte e convertire in decimale il relativo valore? (cioe' 32123D in decimale = 3.281.469).
Grazie a tutti,
Davide.
usando l'operatore << (shift).
se hai problemi poi chiedi pure.
Ciao a tutti, il mio problema e' questo: avendo un array di char, poniamo di 3 elementi a[0]=0x32 a[1]=0x12 a[2]=0x3D, come posso fare per raggruppare i 3 byte e convertire in decimale il relativo valore? (cioe' 32123D in decimale = 3.281.469).
Grazie a tutti,
Davide.
a1[0]=0x32;
a1[1]=0x12;
a1[2]=0x3D;
char tot11[255];
char tot1[255];
strcpy(tot11, itoa(a1[0], tot1, 16));
strcat(tot11, itoa(a1[1], tot1, 16));
strcat(tot11, itoa(a1[2], tot1, 16));
tot11 è = 32123d
mentre
strcpy(tot1, itoa(0x32123D, tot1, 10));
tot1 è = 3281469
puoi anche copiare i valori dell'array in un intero di 4 byte
char a[3];
int i;
char *p;
...
p = &i;
*p++ = a[2];
*p++ = a[1];
*p = a[0];
in i trovi il valore 0x32123d
Io direi con gli shift come dice vizzz.
La soluzione di recoil è interessante e può servire a comprendere i puntatori, ma ha un difetto...il risultato è diverso fra macchine little-endian e big-endian.
Io direi con gli shift come dice vizzz.
La soluzione di recoil è interessante e può servire a comprendere i puntatori, ma ha un difetto...il risultato è diverso fra macchine little-endian e big-endian.
sure, mi ero dimenticato di scriverlo ma è così
io mi diverto troppo con sti giochetti con i puntatori :asd:
starsky.78
18-10-2007, 13:20
Grazie, provero' le varie soluzioni che avete proposto :)
Davide
christiantric
18-10-2007, 13:25
Io direi con gli shift come dice vizzz.
La soluzione di recoil è interessante e può servire a comprendere i puntatori, ma ha un difetto...il risultato è diverso fra macchine little-endian e big-endian.
E che sarebbero ste macchine little-endian e big-endian? Macchine che gestiscono lo stesso tipo di dato con un numero di byte differenti per caso?
E che sarebbero ste macchine little-endian e big-endian? Macchine che gestiscono lo stesso tipo di dato con un numero di byte differenti per caso?
la differenza sta nell'ordinamento dei byte
metti di avere un intero da 4 byte
0x01020304
una macchina big endian salva in memoria quel numero così
0x01 0x02 0x03 0x04
mentre una little endian
0x04 0x03 0x02 0x01
edit: l'esempio che ho fatto io è per un processore little endian, infatti se noti io metto prima l'elemento 2 poi 1 poi 0 dell'array, su una macchina big endian il numero risultante sarebbe stato diverso
trallallero
18-10-2007, 16:18
sure, mi ero dimenticato di scriverlo ma è così
io mi diverto troppo con sti giochetti con i puntatori :asd:
ti regaleró una bella confezione di puntatori per il tuo compleanno, allora :D
trallallero
18-10-2007, 16:20
Io direi con gli shift come dice vizzz.
La soluzione di recoil è interessante e può servire a comprendere i puntatori, ma ha un difetto...il risultato è diverso fra macchine little-endian e big-endian.
e il pdp-endian non se lo caga nessuno ? :O
e il pdp-endian non se lo caga nessuno ? :O
Meno male...oserei dire :D
trallallero
18-10-2007, 16:30
Meno male...oserei dire :D
gia' :D
ma adesso che ci penso, ne manca uno all'appello:
1234
4321
3412
il 1243 ? :mbe:
(non so se ho detto una puttanata, non ho molte basi teoriche :stordita: )
EDIT: se non ricordo male avevamo proprio il problema del 3412 col porting da un sistema Tandem a Unix. Ma non ricordo molto anche perché era il mio primo lavoro
ti regaleró una bella confezione di puntatori per il tuo compleanno, allora :D
http://www.smileys.it/faccine_online/amore/Smileys_it%20(1393).gif
quanto al quarto tipo di ordine dei byte non ho presente, so che esiste il PDP ma per fortuna non ci ho mai avuto a che fare, è brutto :P
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.