WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 12.09.2002, 15:59   #1
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard 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
it00x30 ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:10   #2
0x0001
Jr. Member
 
Registriert seit: 11.09.2002
Beiträge: 29


Standard

ja mit shift right.

__int64 li;
long ll;
long lh;

ll = (long) li;
lh = (long) li >> 32;
____________________________________
remember man and info are you\'re friends
0x0001 ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:14   #3
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:15   #4
Zecke
Jr. Member
 
Registriert seit: 14.11.2000
Alter: 42
Beiträge: 28


Zecke eine Nachricht über ICQ schicken
Standard 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
Zecke ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:19   #5
0x0001
Jr. Member
 
Registriert seit: 11.09.2002
Beiträge: 29


Standard 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.
____________________________________
remember man and info are you\'re friends
0x0001 ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:20   #6
Zecke
Jr. Member
 
Registriert seit: 14.11.2000
Alter: 42
Beiträge: 28


Zecke eine Nachricht über ICQ schicken
Standard stimmt

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

hob do wos mit de bit verwechselt
Zecke ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:22   #7
Zecke
Jr. Member
 
Registriert seit: 14.11.2000
Alter: 42
Beiträge: 28


Zecke eine Nachricht über ICQ schicken
Standard

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.
Zecke ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:24   #8
0x0001
Jr. Member
 
Registriert seit: 11.09.2002
Beiträge: 29


Standard

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.
____________________________________
remember man and info are you\'re friends
0x0001 ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:29   #9
0x0001
Jr. Member
 
Registriert seit: 11.09.2002
Beiträge: 29


Standard

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.
____________________________________
remember man and info are you\'re friends
0x0001 ist offline   Mit Zitat antworten
Alt 12.09.2002, 16:32   #10
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

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.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:18 Uhr.


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