Seite 1 von 1

64 Bit aus 2 mal 32

Verfasst: 16. September 2005 18:21
von BartSimpson
Ich weis, das hat primär nix mit Qt zu tun:(
Aber wie mache ich aus 2 mal ulong einmal qulonglong??

Verfasst: 26. September 2005 14:15
von Christian81
Etwas spät, aber besser als nie :)

Code: Alles auswählen

 long lVar1=0x12345678, lVar2=0x9abcdef0;
 qulonglong qVar1;

 qVar1 = ((qulonglong)lVar1)<<32 + lVar2
 // qVar == 0x123456789abcdef0
So wandert lVar1 in die 32 höchsten bits von qVar1.

Verfasst: 26. September 2005 14:58
von BartSimpson
Danke vielmals:)
es muss aber ulong statt long heissen:)

Verfasst: 28. September 2005 13:18
von BartSimpson
Ebend muste ich festestellen, das das nicht immer geht:(
aus 0x60000 und 0xaf00452 wird nicht
0x60000af00452 sondern 0x0:(

Verfasst: 28. September 2005 13:37
von Christian81
Bei mir funktioniert es wunderbar, allerdings kam noch eine kleine Warnung als ich es mit msvc7 ausprobierte. So ists besser:

Code: Alles auswählen

	unsigned long l1 = 0x60000;
	unsigned long l2 = 0xaf00452;
	qulonglong i64 = (((qulonglong)l1) << 32) + l2;
	// Debugger: i64 = 0x000600000af00452
Wie hast Du denn das Ergebnis überprüft?

Verfasst: 28. September 2005 13:55
von BartSimpson
ich benutze den gcc
ich bekommen keine Warnung.
nach etwas probieren habe ich es gefunden, es liegt am +
wenn ich das durch den Binäroperatur oder ersetzte geht das immer:)

Code: Alles auswählen

Zahl64 = ((qulonglong)MSB)<<32 | LSB 

Verfasst: 28. September 2005 14:04
von Christian81
Ich wollte auch erst "|" benutzen, dachte aber mit "+" ist es leichter zu verstehen. Evtl. muss man vor der Addition noch l2 auf ulonglong casten damit es auch mit dem gcc funktioniert...

Verfasst: 28. September 2005 14:23
von BartSimpson
Die 2 Zahl ist ja schon max. 32 Bit. und damit landet die ja eh rechts. solange wie die usignet ist:)