NIBBLE Pointer???
-
Hallo,
ich nehme an, das ein byte die kleine einheit is c/c++ ist oder, ein nibble wirds wohl nich geben?
wäre cool wenn es sowas wie
BYTE bData; NIBBLE *p= (NIBBLE*)&bData; p[0] bzw. p[1]ginge;)
aber egal mach es mit bytes)
-
-
oder mit bitfields arbeiten, was allerdings vom speicherverbrauch nichts anderes als integers sind
-
@sothis: Auch mit Bitfeldern kommst du nicht darum, dir eine eigene Hilfsklasse zu schreiben - Zeiger auf Bitfelder sind nicht erlaubt.
@Boris: Auf etwas kleineres als einen char kannst du direkt nicht zugreifen. Wenn es dir zu umständlich ist, mit Bit-Operationen zu hantieren, kannst du die auch in eine Hilfsklasse mit zeiger-artigem Interface auslagern:
class nibble_ptr { char* base; int offset; public: nibble_ptr(char* b,int off=0) : base(b),offset(off) {} char operator*() { return offset&1==0 ? base[offset/2]&0xF : (base[offset/2]&0xF0)>>4; } ... };//Für schreibenden Zugriff benötigst du evt. eine Proxy-Klasse ähnlich wie bei vector<bool>
-
CStoll schrieb:
@sothis: Auch mit Bitfeldern kommst du nicht darum, dir eine eigene Hilfsklasse zu schreiben - Zeiger auf Bitfelder sind nicht erlaubt.
das hat dir der teufel gesagt :D, ich bin davon ausgegangen, dass BorisDieKlinge
nur mit kleineren speichereinheiten arbeiten will. dazu brauch man nicht zwingend
zeiger
-
korrekt freunde, wollte nur wissen ob ich auf keine einheiten wie bytes arbeiten kann;) das war ne allg. c(c++ frage;)
-
Nimm es nicht persönlich, aber angesichts deines Kenntnisstandes was die Sprache(n) C/C++ angeht, solltest du in Zukunft vielleicht davon absehen anderen Helfen zu wollen.
-
Log dich ein, und schreibst nochmal

-
eine große hilfe ist auch das in der C++ stdlib enthaltende "bitset"
-
wie ist das eigentlich mit std::vector<bool>?
Wenn ich das noch richtig in Erinnerung habe ist der für bools spezilisiert, sodass er pro element nur 1 bit Daen erzeugt (wird dann Aufgerunden versteht sich) und die Daten sollte doch seriell gespeichert sein -> Pointerzugriff
EDIT://
Templates sind spezialisiert, nich überladen
-
Ja, der verwendet intern einen "normalen" vector<char> und packt jeweils 8 Bit in jedes Element dieses Containers - für den Zugriff werden dann Bit-Operatoren verwendet (innerhalb einer Proxy-Klasse "vector<bool>::reference", die Zuweisungen an und von einzelnen Elementen steuert).
-
lolz_ausgeloggt schrieb:
Nimm es nicht persönlich, aber angesichts deines Kenntnisstandes was die Sprache(n) C/C++ angeht, solltest du in Zukunft vielleicht davon absehen anderen Helfen zu wollen.
BorisDieKlinge schrieb:
Log dich ein, und schreibst nochmal

Eingeloggt oder nicht, aber er hat IMVHO Recht.
-
wie schrieb scott meyers doch gleich? vector<bool> ist ein nettes experiment, aber eines, das fehlgeschlagen ist. oder so ähnlich.
vector<bool> ist kein container.