Wie kann ich Spalten ein long-Wert (32 bit) in vier char-Variablen (8bits) mit C?
Ich habe eine 32 bit lange variable CurrentPosition, dass ich möchte, aufgeteilt in 4 -, 8bit-Zeichen. Wie würde ich das tun die meisten effizient in C? Ich arbeite mit einer 8bit MCU, 8051 architectecture.
unsigned long CurrentPosition = 7654321;
unsigned char CP1 = 0;
unsigned char CP2 = 0;
unsigned char CP3 = 0;
unsigned char CP4 = 0;
//What do I do next?
Sollte ich einfach Verweis auf die Startadresse der CurrentPosition mit einem Zeiger und fügen Sie dann 8 zwei, die Adresse vier mal?
Es ist little Endian.
Will AUCH ich CurrentPosition unverändert bleiben.
- Die endian? ___
- Ich bin mit SDCC mit verwendet die Little-Endian-format
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Zugriff auf die bytes, die durch einen Zeiger als gut,
Ich denke, Sie sollten prüfen, mit einem union:
Bytes kann nun zugegriffen werden wie: CurrentPosition.bytes[0], ..., CurrentPosition.bytes[3]
Wenn Sie mit einem 8-bit-MCU-Verschiebung eine ganze 32-bit-variable ist ein bisschen Arbeit. In diesem Fall ist es besser zu Lesen 4 Byte CurrentPosition mit Zeiger-Arithmetik. Die Darsteller:
nicht ändern, dass die CurrentPosition, aber wenn Sie versuchen zu schreiben, um p[0] ändern Sie die least significant byte CurrentPosition. Wenn Sie möchten, eine Kopie dieser:
Arbeit und mit arr. (Wenn Sie möchten höchstwertige byte an Erster Stelle ändern Sie die Reihenfolge, in der diese Zuordnungen).
Wenn Sie lieber 4 Variablen können Sie natürlich tun:
Nun CPn pro dein original-code ist der Zugriff über
CP[n]
.Ich weiß, dies wurde gebucht vor einiger Zeit. Aber für alle, die noch Lesen, der thread:
Viele Menschen nehmen den Ansatz des sequentiellen Verschiebung des ursprünglichen Wertes. Warum lassen Sie nicht den compiler die Arbeit für Sie tun.
Verwenden Sie eine union & Ihnen zu erlauben, die Werte zu speichern in der gleichen Lage. Definieren Sie eine union, bestehend aus einem 32-bit-long-variable (dies wird sein, wo Sie speichern Sie Ihre CurrentPosition) und eine Struktur, bestehend aus 4 char-Variablen. Oder einfach nur eine einfache 8-bit-integer-array. Wenn Sie schreiben, Ihre CurrentPosition auf der long-Variablen, es werden in demselben Speicherort gespeichert, auf die zugegriffen, wenn Sie Lesen Sie die 4 char-Variablen. Diese Methode ist weniger arbeitsintensiv und nicht erlaubt, den compiler die Arbeit machen, anstatt Zeit & Ressourcen.