Gast
#6049
Hallo! Ich möchte gerne einen 32 Bit Wert vom Typ uint32_t übertragen und zwar über 8 I/O Pins. Also müsste ich die Variable in 4 vom Typ uint8_t splitten. Wie mache ich das am besten? Vielen Dank!
|
Anzeige
|
Umwandlung von 16 Bit in 8 Bit
Gast
#6049
Hallo! Ich möchte gerne einen 32 Bit Wert vom Typ uint32_t übertragen und zwar über 8 I/O Pins. Also müsste ich die Variable in 4 vom Typ uint8_t splitten. Wie mache ich das am besten? Vielen Dank!
Gast
#6050
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
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
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
> 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
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
Gast
#6055
Gute Idee! Habs ausprobiert und festgestellt das in x.u8[0] das HSB steckt, wie du schon sagtest. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|