ich kenns von Bascom mit shift
also erst den lowbyte in ein bytevariable,
dann shift right 4
dann wieder lowbyte in bytevariable (das wär dann ehemals der highbyte)
Hy,
Habe ein Problem da man im I2C EEprom nur bytes speichern kann. Muß ich also die integer in 2 Bytes aufteilen und dann die Bytes ins EEProm nach einander senden.
Nun Mein Problem :
wie löst man das elegand in C einmal das aufteilen und wenn ich es wieder auslese die beiden Bytes wieder in ein Integer zurück wandeln.
ich kenns von Bascom mit shift
also erst den lowbyte in ein bytevariable,
dann shift right 4
dann wieder lowbyte in bytevariable (das wär dann ehemals der highbyte)
Vor den Erfolg haben die Götter den Schweiß gesetzt
Genau Danke. Und wie gehts dann umgekehrt ?
so vielleicht ?
uint16_t word = (highbyte<<8 ) + lowbyte;
Gruß Sebastian
Edit Quatsch: so müßte es gehen,
word = lowbyte;
word += (highbyte<<8 );
P.S. man sollte erst denken, und dann posten
Da fällt mir noch was ein, eine Union sollte noch besser dafür geeignet sein...
Gruß Sebastian
@izaseba:
Die beiden Lösungen die du geschrieben hast bewirken genau das gleiche!
mfg skillii
Das heißt ?Die beiden Lösungen die du geschrieben hast bewirken genau das gleiche!
Beides daneben, oder beides richtig ?
Gruß Sebastian
Glaube schon, dass beide richtig sind!
Kann sein, dass es ein problem gibt wenn lowbyte und highbyte vom typ unsigned char sind.
Abhilfe: vor dem shiften nach unsigned int casten.
ja, genau, beides richtig,
habe gerade mal kurz kompiliert, beide Lösungen führen zum richtigem Ergebnis.
Ich glaube der Compiler castet die schon automatisch, sonst hätte ich gedacht, daß ich bei den High Byte immer 0 rausbekomme.
Gruß Sebastian
Rumshiften braicht man eigentlich nicht.
Guckst du hier.
Disclaimer: none. Sue me.
Lesezeichen