hallo, ich hab an meinem AVR ein externes EEPROM hängen, das ich über den i2c beschreibe bzw. auslese. Zum Schreiben nutze ich dabei eine Funktion i2cwrite(); die Daten in Byteform an den Speicher sendet. die Funktion: unsigned char i2cwrite(unsigned char data); damit sende ich meine Daten bislang in der Form i2cwrite('1'); i2cwrite('9'); i2cwrite('8'); .... is natürlich totale Platzverschwendung, weil immer ein volles Byte für jede Ziffer verschwendet wird. War aber bis jetzt ok, da ich genug Platz hatte. Nachdem ich nun noch zusätzliche Daten speichern möchte, würd ich gern die int bzw. float- Werte die ich abspeichere in Hex umwandeln um sie platzsparender zu archivieren. Da gibts doch bestimmt ein intelligentes standardverfahren für was meint ihr? danke schon mal im voraus Markus
WAS willst du eigentlich von Anfang an speichern? Woher kommt die "198"? Wenns nen Integer ist, dann kannste einfach die einzelnen Bytes rausziehen (maskieren und shiften) und schiebst halt diese binärdaten (4 Byte beim Integer, 4 bei ner Single) statt '1''9''8'. Also, woher kommt die 198?
Wenn du zwei Ziffern in ein Byte schreiben willst, dann nimm BCD Zahlen.
Du wirst nachher beim Auslesen sowieso wieder Logik dazwischenklemmen, weil mit der Lupe erkennt man nich allzu viel im EEProm. Also: Kritzel deine Werte als Rohdaten rein, d.h.: Nicht '1' und '2' und '3' als drei Bytes, sondern ein Byte mit 123.
>>Wenn du zwei Ziffern in ein Byte schreiben willst, dann nimm BCD Zahlen.
BCD alleine reicht dann nicht, es muss dann packed-BCD sein, also eine
Ziffer je Nibble.
Jochen Müller
Warum überhaupt die Zahlen erst umständlich in ASCII umwandeln? Einfach so wie sie sind (1, 2 oder 4 Byte) binär abspeichern und gut is. Peter
... ok war zugegebenermaßen etwas sparsam mit Informationen - gespeichert werden soll ein Integerwert und drei floatwerte der Form: 123198 12.234 36.575 123.56 253677 56.372 78.326 687.83 .... und danke schon mal für die zahlreichen Antworten gruß Markus
Markus, 123198 12.234 36.575 123.56 253677 56.372 78.326 687.83 in EINEM Byte kannst Du 2 Ziffern unterbringen, je Nibble also 1 Ziffer. 0000 = 0 0001 = 1 ... 1001 = 9 die Codierungen 1010..1111 sind also ungenutzt, und du kannst damit das Komma sowie das Zahlenende kodieren. Alle o.g. Floatwerte passen dann in jeweils 3Byte. Beispiel für 12.234 --BYTE--- --BYTE--- --BYTE--- 0001 0010 1111 0010 0011 0100 1 2 , 2 3 4 Jochen Müller
danke dir klasse Tip - einfach, aber draufkommen muss man halt damit kann ich was anfangen gruß Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.