Wie teile ich einen langen Wert (32 Bit) in vier Char-Variablen (8 Bit) mit C auf?

7

Ich habe eine 32 Bit lange Variable, CurrentPosition, die ich in 4, 8-Bit-Zeichen aufteilen möchte. Wie würde ich das am effizientesten in C machen? Ich arbeite mit einer 8bit MCU, 8051 Architecture.

%Vor%

Sollte ich nur die Startadresse von CurrentPosition mit einem Zeiger referenzieren und dann acht zwei dieser Adresse vier Mal hinzufügen?

Es ist Little Endian.

AUCH möchte ich, dass CurrentPosition unverändert bleibt.

    
PICyourBrain 30.04.2010, 19:46
quelle

6 Antworten

13
%Vor%

Sie könnten auch über einen Zeiger auf die Bytes zugreifen,

%Vor%     
nos 30.04.2010, 19:49
quelle
5

Ich denke, Sie sollten eine Union in Betracht ziehen:

%Vor%

Auf die Bytes kann jetzt wie folgt zugegriffen werden: CurrentPosition.bytes [0], ..., CurrentPosition.bytes [3]

    
Justin Muller 30.04.2010 20:03
quelle
2

Wenn Sie eine 8-Bit-MCU verwenden, ist das Verschieben einer ganzen 32-Bit-Variablen ein wenig Arbeit. In diesem Fall ist es besser, 4 Bytes CurrentPosition mit Zeigerarithmetik zu lesen. Die Besetzung:

%Vor%

ändert die CurrentPosition nicht, aber wenn Sie versuchen, in p [0] zu schreiben, ändern Sie das niederwertigste Byte der CurrentPosition. Wenn Sie eine Kopie möchten, tun Sie dies:

%Vor%

und arbeite mit arr. (Wenn Sie das höchstwertige Byte zuerst ändern möchten, ändern Sie die Reihenfolge in diesen Zuweisungen).

Wenn Sie 4 Variablen bevorzugen, können Sie natürlich tun:

%Vor%     
Maciej Hehl 30.04.2010 20:02
quelle
0
%Vor%     
Matt Greer 30.04.2010 19:48
quelle
0
%Vor%

Nun wird CPn pro Originalcode über CP[n] aufgerufen.

    
Matt Joiner 30.04.2010 20:41
quelle
0

Ich weiß, dass das vor einiger Zeit gepostet wurde. Aber für jeden, der den Thread noch liest: Viele Menschen nehmen den Ansatz, den ursprünglichen Wert sequenziell zu verschieben. Warum lassen Sie nicht den Compiler die Arbeit für Sie erledigen? Verwenden Sie eine Union & amp; damit Sie die Werte am selben Ort speichern können. Definieren Sie eine Union, die aus einer 32 Bit langen Variablen besteht (hier speichern Sie Ihre CurrentPosition) und einer Struktur aus 4 Char-Variablen. Oder einfach ein einfaches 8-Bit-Integer-Array. Wenn Sie Ihre CurrentPosition in die long-Variable schreiben, wird sie an der Stelle gespeichert, auf die Sie beim Lesen der 4 char-Variablen zugegriffen haben. Diese Methode ist viel weniger arbeitsintensiv und erlaubt es dem Compiler nicht, die Arbeit zu verrichten, anstatt Zeit zu verschwenden. Ressourcen.

    
Sean 05.01.2018 09:35
quelle

Tags und Links