C / C ++ leggere un byte da un hexinput da stdin
Domanda
Non riesco a trovare un modo esattamente su come effettuare le seguenti operazioni in C / C ++.
Input: valori esa decimale, ad esempio: ffffffffff ...
Ho provato il seguente codice per leggere l'input:
uint16_t twoBytes;
scanf("%x",&twoBytes);
Quello funziona bene e tutto, ma come faccio a dividere i 2bytes in 1bytes uint8_t
valori (o forse anche leggere il primo byte solo). Vorrebbe leggere il primo byte dall'input, e conservarla in una matrice di byte in una posizione di scelta.
uint8_t matrix[50][50]
Dal momento che non sono molto esperti nella formattazione / lettura da input in C / C ++ (e hanno usato solo scanf finora) altre idee su come farlo facilmente (e veloce se va) è molto apprezzato.
Modifica:. Trovato anche un metodo migliore utilizzando la funzione fread in quanto consente una specificare quanti byte si legga dal flusso (standard input in questo caso) e salvare una variabile / array
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
I parametri
ptr -. Puntatore a un blocco di memoria con una dimensione minima di dimensione (*) byte conteggio
dimensione -. Dimensione in byte di ogni elemento da leggere
Numero -. Numero di elementi, ciascuno con una dimensione di byte dimensioni
flusso - puntatore ad un oggetto File che specifica un flusso di input.
Soluzione
%x
Legge un unsigned int
, non un uint16_t
(pensato che possono essere gli stessi sulla vostra piattaforma particolare).
Per leggere un solo byte, provate questo:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
Questa legge un <=>, ma si ferma dopo aver letto due caratteri (due caratteri esadecimali è uguale a otto bit, o un byte).
Altri suggerimenti
Si dovrebbe essere in grado di dividere la variabile in questo modo:
uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
Un paio di pensieri:
1) leggere come personaggi e convertirlo manualmente - doloroso
2) Se si sa che ci sono un multiplo di 4 hexits, si può solo leggere twobytes e poi convertire i valori di un byte con alti = twobytes << 8; bassi = twobyets & FF;
3)% 2x