Lsb & Msb

chefsalat-

Mitglied
Hallo zusammen,
ich möchte gerne aus einer long-Zahl den LSB und den MSB berechnen.
die long-Zahl bekomme ich aus einem Edit-Feld zugewiesen. Im Endeffekt ist es egal, ob es eine int oder eine long ist, die ich aus dem Edit-Feld bekomme.

Ich habe also:

C++:
long zahl = 64000;   //entspricht in hex = FA00

Am Schluss sollen die Werte in etwa so sein.
C++:
x = 0xFA   //Keine Zuweisung. x soll int sein  :)
y = 0x00   //Keine Zuweisung. y soll int sein  :)

Kann mir jemand weiterhelfen, wie ich das hinbekomme?
Durch Bit-Shifting, Maskieren, ..., egal

Danke

Gruß chefsalat-
 
long zahl = 64000; //entspricht in hex = FA00
Das stimmt nicht ganz. Streng genommen ist das bei einem long int nämlich 0x0000FA00 (weil 32 Bit).
wenn es ein short int wäre, dann wäre es 0xFA00 (weil 16 Bit).
Zumindest gilt das für x86-Prozessoren.

Davon abgesehen:
Code:
int y = zahl & 0xFF;
int x = (zahl & 0xFF00) >> 8;
 
Kannst du so machen:
C++:
long zahl = 64000;   //entspricht in hex = FA00 

// Vordefinierte Makros bei Windows:

int x = HIBYTE(zahl);
int y = LOBYTE(zahl);

// oder mit Bitoperationen:

int x = ((zahl >> 8) & 0xFF);
int y = (zahl & 0xFF);
Gruß
MCoder
 
Hi!
Als Erstes:
Bei der Zahl 0xFA00 ist das MSB nicht 0xFA! LSB bzw. MSB bedeutet Least Significant Bit bzw. Most Significant Bit - und ein Bit ist entweder 1 oder 0 ;)
Es ist nicht egal ob long oder int(32bit & 64bit). Also so wie ich dich verstanden habe, willst du bei einer 32bittigen (ich nehme einfach an du nimmst int;) ) Zahl jeweils das High-Word und das Low-Word herausbekommen.
Das kannst du durch Maskieren & Shiften erledigen. Um die unteren 16bit zu bekommen, musst du ledeglich deine zahl mit 0xFFFF maskieren.
Um die oberen 16bit zu bekommen, maskierst du deine Zahl mit 0xFFFF0000, und schiebst das ganze um 16stellen nach rechts.
Beispiel:
Code:
	int zahl = 0x00ff000a;
	int x = (zahl&0xffff0000)>>16; // x = 0x00ff, y = 0x000a
	int y = zahl&0xffff;

mfg,
muddin
 
Hi.
Hi!
Als Erstes:
Bei der Zahl 0xFA00 ist das MSB nicht 0xFA! LSB bzw. MSB bedeutet Least Significant Bit bzw. Most Significant Bit - und ein Bit ist entweder 1 oder 0 ;)
Man kann es sowohl auf die Wertigkeit der Bits als auch auf die Wertigkeit der Bytes beziehen. Es ist also beides nicht falsch. Hier geht as aber um Bytes.
Es ist nicht egal ob long oder int(32bit & 64bit). Also so wie ich dich verstanden habe, willst du bei einer 32bittigen (ich nehme einfach an du nimmst int;) ) Zahl jeweils das High-Word und das Low-Word herausbekommen.
Ich meine er will von einem Word (16 bits) das MSB bzw. das LSB herausbekommen.

Gruß
 
Wow, hier gehts ja ab. In der Zwischenzeit hab ich noch n bischen rumprobiert.
Eine Lösung habe ich auch selber gefunden.

Bin mir zwar nicht so ganz sicher, ob sie immer funktioniert, aber mit ein paar Testwerten hats geklappt.

C++:
int zahl = 64000;

int hex_high = zahl / 0xFF;
int hex_low = zahl & 0xFF;

Es tut mal so, wie es soll.

Ja, richtig, ich wollte das High- und das Low-Word bekommen.
Ich denke, ich werde die von MCoder vorgeschlagene Lösung nehmen.
Der Code ist dann einfacher zu verstehen für jemanden, der nicht so viel Ahnung davon hat.

Danke an euch alle.

Gruß chefsalat-
 
Hmm, ich glaub, so langsam kapier ich es.
Die erste Lösung mit HIBYTE / LOBYTE war die gesuchte.
BYTE = 0xYY
WORD = 0xYYYY

Richtig?

Danke an alle.

Gruß chefsalat-
 

Neue Beiträge

Zurück