WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   C++ und ein problem mit __int64 (http://www.wcm.at/forum/showthread.php?t=69716)

it00x30 12.09.2002 16:59

C++ und ein problem mit __int64
 
hi,

microsofts compiler unterstützen den datentyp __int64 (also 8 byte)

so weit so gut, mein problem ist, dass ich diesen datentypen in ein file schrieben muss und keine ahnung habe wie, (printf("%d", i64XXX); konvertiert zu long und verfälscht so die zahl)

hat jemand eine idee, wie ich die acht byte in 2 longs (4byte) umwandeln kann, die jeweils die erste hälfte und die zweite hälfte des __int64 repräsentieren?

danke für die hilfe

0x0001 12.09.2002 17:10

ja mit shift right.

__int64 li;
long ll;
long lh;

ll = (long) li;
lh = (long) li >> 32;

Who-T 12.09.2002 17:14

hmm, über bitshifting wär eine möglichkeit, is aber sicher nicht die schönste

Code:

unsigned long first4bytes;
unsigned long second4bytes;
unsigned __int64 number; // dein wert

first4bytes = (0xFFFFFFFF00000000 & number) >> 32;
second4bytes = (0x00000000FFFFFFFF & number);

funkt nur bei unsigned so, ich hoff das stimmt so

Zecke 12.09.2002 17:15

is zwar schon länger her :-)
 
l_high = int64 / 1024;
l_low = int64 - (l_high*1024);

printf("&d&d",l_high,l_low);

vielleicht kompliziert, müsst oba gehn

0x0001 12.09.2002 17:19

Re: is zwar schon länger her :-)
 
Zitat:

Original geschrieben von Zecke
l_high = int64 / 1024;
l_low = int64 - (l_high*1024);

printf("&d&d",l_high,l_low);

vielleicht kompliziert, müsst oba gehn

öh nö geht nicht, denn
l_high = int64 /1024;
enspricht:
l_high = int64 >> 10;

is also ein bisserl zu wenig.

Zecke 12.09.2002 17:20

stimmt
 
i hob jo versucht mein post zu löschn, oba irgendwie geht des nit

hob do wos mit de bit verwechselt :D

Zecke 12.09.2002 17:22

Zitat:

Original geschrieben von Who-T
hmm, über bitshifting wär eine möglichkeit, is aber sicher nicht die schönste

Code:

unsigned long first4bytes;
unsigned long second4bytes;
unsigned __int64 number; // dein wert

first4bytes = (0xFFFFFFFF00000000 & number) >> 32;
second4bytes = (0x00000000FFFFFFFF & number);

funkt nur bei unsigned so, ich hoff das stimmt so

first4bytes brauchst ja nicht verunden oder? die fallen sowieso weg.

0x0001 12.09.2002 17:24

jo des geht irgendwie nur ganz kurz nachm post oder so, i a bisserl komisch.:)

generell wollte ich noch sagen:
Widermal ein feature von M$ mit dem es selber nicht klarkommt.

0x0001 12.09.2002 17:29

Zitat:

Original geschrieben von Zecke


first4bytes brauchst ja nicht verunden oder? die fallen sowieso weg.

Die anderen auch nicht da die shifts standardmässig mit 0 aufüllen.

_m3 12.09.2002 17:32

http://msdn.microsoft.com/library/de...html/int64.asp
Zitat:

In the printf family of run-time library functions, the format for optional prefixes includes I64, in addition to F, N, h, l, and L. For example, the following statement includes an example of a valid format string:

printf("%I64d", x);

When manipulating 64-bit integers, no special functions are necessary. Ordinary arithmetic operators and operations behave as expected.


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag