PDA

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.

recoil
17-10-2007, 09:08
edit: ops... stavo scrivendo un'altra cosa :asd: poi ti rispondo seriamente se mi ricordo di ripassare

vizzz
17-10-2007, 09:14
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.

okay
17-10-2007, 09:28
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

recoil
17-10-2007, 10:13
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

cionci
17-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.

recoil
17-10-2007, 16:33
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?

recoil
18-10-2007, 13:45
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

cionci
18-10-2007, 16:25
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

recoil
18-10-2007, 23:49
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