2013-04-22 11 views
6

Sto cercando di modificare i dati in array, questo fa parte del mio codice:Scanf unsigned char in esadecimale

u_char paket[100]; 
//here i put some data into array and then trying to change it by user 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]); 

Quando il mio ingresso è ad esempio 88.88.88.88.88.88 pone paket[0] - paket[5]-88, ma cambia anche paket[6],paket[7] e paket[8] a 0.

Come è possibile e come risolverlo per favore? Ho bisogno di cambiare solo [0] - [5]

+0

La dichiarazione del 'Array u_char' potrebbe inizializzare tutti gli elementi a 0. la risposta di alcuni Fellow che ha cancellato un minuto fa aveva forse ragione: si potrebbe scansionare un int aka 4 byte/caratteri su ogni identificatore di formato su un sistema big-endian. – collapsar

+0

Ah, errore mio, non ho inserito l'intero codice. Tra la prima e la seconda riga carico i dati in quella matrice. Quindi, prima che scanf quegli elementi non siano impostati a 0, il problema è con scanf. – user2306381

risposta

0

Il codice va bene

u_char paket[100]; 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]) 

non modifica i valori di paket[6], paket[7] and paket[8].

4

Il codice è corretto per C99 e versioni successive. Presumibilmente si sta utilizzando una libreria standard C che non supporta il modificatore di lunghezza hh, introdotto in C99; probabilmente la libreria standard Microsoft C.

Se avete bisogno di sostenere questa vecchia libreria standard C, si dovrà riscrivere il codice per essere C89-compatibile, ad esempio:

unsigned p[6]; 

if (scanf("%x.%x.%x.%x.%x.%x", &p[0], &p[1], &p[2], &p[3], &p[4], &p[5]) == 6) 
{ 
    int i; 
    for (i = 0; i < 6; i++) 
     paket[i] = p[i]; 
} 
+0

Grazie mille! btw unsigned p [6]; o char non firmati [6]; ? o non importa? – user2306381

+0

@ user2306381: Deve essere 'unsigned p [6];', poiché '% x' richiede un puntatore a' unsigned', * not * un puntatore a 'unsigned char'. – caf