Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » wie kann ich teile von Variablen ändern?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.04.2005, 17:47 Uhr
RedEagle



Hi
ich hab eine variable, in der bestimmte hex-werte hintereinander gespeichert werden sollen

bsp:
wert 1 = 0xa
wert 2 = 0xf
wert 3 = 0xf
wert 4 = 0xe

soll später in dieser Variable zu 0xaffe werden.

1. Wie kann ich die so speicher??
2. Wie kann ich die dann wieder auslesen??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.04.2005, 17:55 Uhr
Pablo
Supertux
(Operator)


Benutze Masken. Wenn du in einer Variable 4 Werte speicherst (gehen wir von einer int Variable mit 32 Bits), dann kannst du die Daten so lesen, indem du eine Maske setzt und sie mit der variable speicherst. Eine Maske ist eine spzielle Bitfolge von 0 und 1.

Angenommen, die willst nur die ersten 8 Bits einer int Variable lesen, dann würde die maske so aussehen
0000 0000 0000 0000 00000 0000 1111 1111 (24 Nullen + 8 Einsen)


C++:
int read_the_first_8_little_bits(int zahl)
{
    int maske = pow(2,8) - 1; /* maske = 0000 0000 0000 0000 00000 0000 1111 1111
    return zahl & maske;
}



edit: für die nächsten 8 Bits, wäre due Maske
0000 0000 0000 0000 1111 1111 0000 0000

also

C++:
int read_the_second_8_little_bits(int zahl)
{
    int maske = pow(2,16) - pow(2,8); /* maske = 0000 0000 0000 0000 1111 1111 0000 0000
    return zahl & maske;
}



usw.

edit2:
zum Speichern geht genauso, allerdings die Maske würde so aussehen
1111 1111 ··· (hier die Zahl in 2er Kod.) ··· 1111 1111
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 12.04.2005 um 18:01 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.04.2005, 18:02 Uhr
0xdeadbeef
Gott
(Operator)



C++:
int a[] = { 0xa, 0xf, 0xf, 0xe };
int i = a[0] << 24 | a[1] << 16 | a[2] << 8 | a[3];


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.04.2005, 18:02 Uhr
RedEagle



ok, danke
und wie speicher ich die??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.04.2005, 18:05 Uhr
Pablo
Supertux
(Operator)


genauso, wie beffy es getan hat.

edit: mann bin ich blöd, wieso bin ich nicht selber drauf gekommen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 12.04.2005 um 18:05 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.04.2005, 18:15 Uhr
RedEagle





ps.: den eintrag nicht gesehen..
--
MFG RedEagle

Dieser Post wurde am 12.04.2005 um 18:15 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.04.2005, 21:01 Uhr
RedEagle



Ein kleines Problem hab ich noch

mein code:

C++:
code = 4 << 4 | 5;

int  maskeBG = 0x000000f0,
     maskeTC = 0x0000000f;

int bgcolor   = code & maskeBG;
int textcolor = code & maskeTC;



textcolor erhält wie gewünscht eine 5
aber bgcolor bekommt eine 64 !!


Berechnung:

  0x000000f0
& 0x00000045
--------------
  0x00000040

0x40 == 64



wie mach ich jetzt aus 0x40 ein 0x04 ??
--
MFG RedEagle

Dieser Post wurde am 12.04.2005 um 21:02 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.04.2005, 21:09 Uhr
Pablo
Supertux
(Operator)


bits swapen würde mit zyklischen Shifts gehen, allerdings weiß ich nicht, ob es zll in C gibt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.04.2005, 21:13 Uhr
RedEagle




--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.04.2005, 21:16 Uhr
RedEagle



aso!!!

einfach ">> 4"


--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: