AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Ansi C] Long in Bytes aufteilen

Ein Thema von Newbie44 · begonnen am 9. Okt 2007 · letzter Beitrag vom 9. Okt 2007
 
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: [Ansi C] Long in Bytes aufteilen

  Alt 9. Okt 2007, 18:22
Je nachdem, was "steht so im Speicher" bedeutet, kann der Union-Ansatz unter Umständen verkehrte Ergebnisse liefern. Der Shift-Ansatz hingegen funktioniert auf jedem System korrekt, ist jedoch geringfügig langsamer. Sollte der Union-Ansatz korrekte Ergebnisse liefern, kommt als Alternative auch ein Cast in Frage:
Code:
uint8_t* bytes = reinterpret_cast<uint8_t*>(&input); // C++
bzw.
uint8_t* bytes = (uint8_t*)&input; /* C */
Wenn du zur Kompilierzeit die Byte-Reihenfolge im Speicher kennst, kannst du auch den Cast-Ansatz benutzen und dann je nachdem ob Big- oder LittleEndian das Array vorwärts oder rückwärts durchlaufen.

Noch ein Tipp zu dem Verodern mit 255: Irgendwann, besonders wenn du mehr oder weniger als 8 Bit benötigst, wirst du dich mit der 255 unter Umständen selbst ins Fleisch schneiden. Lieber gleich 0xFF, da wird auf den ersten Blick klar, was passiert. (Bei C sind die Chancen realistisch, dass dein Compiler Binärdarstellung beherrscht, das ist dann eventuell auch noch eine Alternative).

Zitat:
x = x << 8 | y
Ich kann mich dunkel daran erinnern, dass die Shift-Operatoren in C++ deshalb als Stream-Operatoren missbraucht werden, weil sie recht spät ausgewertet werden. Dein Ausdruck wäre also mit Klammern sicherer, und gerade bei diesen ganzen Schiebe- und Verund- und -oderungsoperationen kommt man so leicht durcheinander, dass man lieber ordentlich klammern sollte.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz