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.

cplusplus ref

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top