PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: 256Bit Speicher anfordern und mit int verodern



maxxle
01-12-2005, 13:11
Hallo!

Folgendes Problem
Ich muss in ein 256Bit Feld unterschiedliche Ints unterbringen.

z.b. An Position 45 hört der erste Int auf, an Position 126 hört der zweit Int auf.


1. wie kann ich genau 256Bit alllozieren
2. Die Ints werden geshiftet und dann mit dem Feld verodert


Mein Lösungsansatz stark verkürzt:


#define SHIFT 64;
int64_t * feld = (int64_t *)calloc(4, int64_t);
int64_t * test = (int64_t *)calloc(4, int64_t);

*(test+3) = 0x1;
test <<| SHIFT; // HIER GIBTS WAS AUF DIE NUSS, Wenn SHIFT>63

feld |= test;



Ich habs schon mit memcpy versucht, das hat aber auch nicht wirklich weitergeholfen.




Das Problem hierbei ist, das ich zwar einen einfach Int an die letzte Position des feldes hinkopieren kann. Ich kann aber leider nicht weiter wie 63 mal shiften, weil der Wert dann aus dem ersten int64 rausfällt.
Ich brauche also 256Bit Speicher am Stück!


mfg


maxxle

locus vivendi
01-12-2005, 14:02
Was zum Teufel versuchst du zu erreichen? Wenn du ein Bitset brauchst, wie der Zufall es will gibt es da bereits ein brauchbares im C++-Standard:
http://www.dinkumware.com/manuals/reader.aspx?b=p/&h=bitset.html

maxxle
01-12-2005, 14:35
Wie ich schon sagte:
Ich brauche ein Feld mit 256Bit Breite. In dieses Feld sollen unterschiedliche Werte geschrieben werden, die als Ints vorliegen. Die Endposition des jeweiligen Ints soll dabei variabel sein.

Wozu ich das brauche darf/kann ich dir leider nicht sagen.

Aber die Lösung mit dem Bitset schaut genial aus.

quinte17
03-12-2005, 09:39
mach halt ein struct:

struct test
{
signed a:46; // 46 bits lang mit vorzeichen
unsigned b:20; // 20 bits lang ohne vorzeichen
} temp;


und dann kannst du ganz bequem mit:

temp.a = -567;
temp.b = 123;

arbeiten... oder wie du des auch immer haben willst...

greetz