![]() |
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 |
ja mit shift right.
__int64 li; long ll; long lh; ll = (long) li; lh = (long) li >> 32; |
hmm, über bitshifting wär eine möglichkeit, is aber sicher nicht die schönste
Code:
unsigned long first4bytes; |
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 |
Re: is zwar schon länger her :-)
Zitat:
l_high = int64 /1024; enspricht: l_high = int64 >> 10; is also ein bisserl zu wenig. |
stimmt
i hob jo versucht mein post zu löschn, oba irgendwie geht des nit
hob do wos mit de bit verwechselt :D |
Zitat:
|
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. |
Zitat:
|
http://msdn.microsoft.com/library/de...html/int64.asp
Zitat:
|
ok, stimmt, müsst ohne dem ganzen & auch gehen
wobei _m3s lösung auch halbwegs elegant aussieht |
danke erst einmal.
das mit dem format-string vom printf muss ich übersehen haben ... die methode mit bitschift geht leider nicht (hab ich schon lange ausporbiert ...) inzwischen hab ich aber herausgefunden wies geht (ganz einfach, wenn mans genau nimmt) der fehler ist, dass man nicht im binärsystem denken darf, sondern im dezimalsystem: __int64 i = 123456789876; //der highPart long high = i / 1000000000; //also 123 //der lowpart long low = i % 1000000000; //also 456789876 ist doch ganz einfach oder? |
warum findet ihr bitshifting nicht elegant? is doch sicher die schnellste möglichkeit sowas zu tun?
vielleicht abgesehn von der eingebauten funktionalität, die _m3 ausgegraben hat. |
elegant schon aber leider falsch ...
|
wollt nur wissen, obs grundsätzlich was gegen bitshifting einzuwenden gibt, von dem ich noch nix weiß.
natürlich sollte mans nur verwenden, wenn man auch weiß um wie viele stellen und in welche richtung man shiften will. |
im gegenteil, bitshifting bzw bitwise operations verwend ich sehr gerne - erstens gibts nichts schnelleres, und zweitens kann man viele sachen sehr elegant lösen (zb eine flag-variable, die 32 flags darstellt - wenn man das ding schön kommentiert ist es doch viel besser als 32 XYZFlag-variablen zu halten ...)
|
I64-Problem
Wenn man den expandierten Assemblercode des printf-Aufrufs mit dem richtigen Formatstring analysiert kommt man drauf, dass MS auch nur die shift-Methode verwendet. Aber wer kennt heute noch Assembler.
Stz. |
mir kommt der verdacht, dass die shift-methode nur an mir gescheitert ist ... ;-)
|
| Alle Zeitangaben in WEZ +2. Es ist jetzt 07:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag