Umwandlung von 16 Bit in 8 Bit

Gast #6050
Lesenswert?

union {
uint23_t u32;
uint8_t u8[4];
} x;

// 32-Bit Wert einschreiben:
x.u32 = <irgend ein wert>;

// Die 8-Bit Werte auslesen
a = x.u8[0];
a = x.u8[1];
a = x.u8[2];
a = x.u8[3];

Es geht auch über bit shift befehle, aber mit unions ist es viel 
komfortabler.

Gruss
Christian
Gast #6051
Lesenswert?

Geht das eigentlich auch, wenn man einen signed long hat und diese in 4 
unsigned chars wandeln möchte?

also etwa so in der art:

  union
  {
    long s32;
    unsigned char u8[4];
  } x;

was ist das LSB und was das HSB?
Gast #6052
Lesenswert?

Logisch, du musst bloss aufpassen, wo das Vorzeichenbit bei der 
long-Komponente liegt. Üblicherweise ist dies das höchstwertige Bit.

HSB = Höchstwertiges Bit bzw. Byte, wird meistens jedoch als MSB (Most 
Significant Bit) bezeichnet.
LSB = Niederwertigestes Bit bzw. Byte (Lowest significant Bit).

Zur Erklärung:
Wenn du die Dezimalzahl 4712 anschaust, dann ist 2 das niederwertigste 
und 4 das höchstwertigste Zeichen. Genau so geht es auch mit Binärzahlen 
und anderen Zahlensystemen.

Gruss
Christian
Gast #6053
Lesenswert?

> HSB = Höchstwertiges Bit bzw. Byte, wird meistens
> jedoch als MSB (Most Significant Bit) bezeichnet.
> LSB = Niederwertigestes Bit bzw. Byte (Lowest
> significant Bit).

Klar, nur wo liegt dieses im Array?

ist x.u8[0] das niederwertigste bit, oder das höherwertigste?
Gast #6054
Lesenswert?

Hängt davon ab, wie long-Werte im Zielsystem abgebildet werden.
Die union legt einfach die verschiedenen Variablendeklarationen 
übereinander. So gesehen wird wahrscheinlich u8[0] das höchstwertige 
Byte bezeichnen.
Ich würde es aber zuerst sicherheitshalber mal ausprobieren.
Setze dazu x.s32 = 0x12345678
uind lies danach die 4 Bytes aus, dann weisst du genau wie dieselben im 
Speicher abgelegt sind. Die einzelnen Werte der vier Bytes x.u8[0] bis 
x.u8[3] betragen 0x12, 0x34, 0x56 und 0x78.

Gruss
Christian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren