PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16bit Variable in High- und Low-Bytes zerlegen?



cht
07.01.2005, 17:36
Hallo,
Ich habe gerade folgendes Problem:


void MeineFunktion(unsigned short Addr) {
typedef struct{
unsigned char high;
unsigned char low;
} uint16;
AndereFunktion(((uint16) Addr).high);
AndereFunktion(((uint16) Addr).low);
}

Ich möchte den 16bit-Parameter in H- und L- Byte zerlegen und habe dazu versucht, das Ganze in eine Struktur aus 2 Bytes umzuwandeln.
1) Muss in der Struktur high oder low am Anfang stehen (Big oder Little Endian?)
2) error: conversion to non-scalar type requested... Scheint gar nicht zu funktionieren. gibt es Alternativen?
Schonmal Danke für eure Hilfe
mfG

cht

bluebrother
07.01.2005, 18:24
warum machst du einen typecast nach uint16 von addr? du willst doch das Element high (resp. low) von addr ansprechen, also addr.high resp. addr.low -- die sind unsigned char und das ist ja 8 bit (also uint8).
Wie stellst du dir die Umwandlung vor? Genaugenommen brauchst du da schon ne Funktion für ...
Warum heißt dein struct eingentlich uint16? Sieht irgenwie komisch aus *grübel*

Felix G
07.01.2005, 20:03
Variablen zerlege ich immer so:



void MeineFunktion(unsigned short Addr)
{
unsigned char high, low;

low = Addr & 0xFF;
high = (Addr >> 8) & 0xFF;
}



wobei man das "& 0xFF" eigentlich auch weglassen könnte.
(schaden tuts aber auch nicht, und ich finds übersichtlicher)