Frage

Kann nicht genau einen Weg finden, wie die folgend in C / C ++ zu tun.

Input: hexdecimal Werte, zum Beispiel: ffffffffff ...

Ich habe den folgenden Code versucht, um die Eingabe zu lesen:

uint16_t twoBytes;
scanf("%x",&twoBytes);

Das ist, funktioniert gut und alle, aber wie gespalten ich die 2bytes in 1bytes uint8_t Werte (oder vielleicht sogar das erste Byte nur lesen). Möchte das erste Byte von dem Eingang lesen und speichern sie in einer Byte-Matrix in der Lage zu wählen.

uint8_t matrix[50][50]

Da ich in Formatierung nicht sehr geschickt bin / Lesen von Eingabe in C / C ++ (und hat nur verwendet scanf bisher) noch andere Ideen, wie man dies leicht zu tun (und schnell, wenn es geht) wird sehr geschätzt.

Edit:. Gefunden sogar eine bessere Methode durch die fread-Funktion, wie es läßt man angeben, wie viele Bytes aus dem Stream lesen sollte (in diesem Fall stdin) und auf eine Variable / Array speichern

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

Parameter

ptr -. Zeiger auf einen Speicherblock mit einer Mindestgröße von (Größe * count) Bytes

Größe -. Größe in Bytes jedes Element gelesen werden

zählen -. Anzahl der Elemente, von denen jeder mit einer Größe von size Bytes

Strom - Zeiger auf ein File-Objekt, das einen Eingangsstrom angibt.

cplusplus ref

War es hilfreich?

Lösung

%x liest ein unsigned int, kein uint16_t (dachte, sie auf die jeweilige Plattform die gleiche sein kann).

Um nur ein Byte zu lesen, versuchen Sie dies:

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

Dies liest eine unsigned int, stoppt aber nach der Lektüre zwei Zeichen (zwei Hex-Zeichen gleich acht Bits oder ein Byte).

Andere Tipps

Es sollte möglich sein, die Variable wie folgt aufgeteilt:

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;

Ein paar Gedanken:

1) es als Zeichen lesen und wandeln sie manuell - schmerzhaft

2) Wenn Sie wissen, dass es ein Vielfach von 4 hexits ist, können Sie einfach in twobytes lesen und dann zu einem Byte-Werten mit hohem = twobytes << 8 konvertieren; low = twobyets & FF;

3)% 2x

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top