Diskuze: C++ Přičtení hodnoty DWORD do proměnné __int64

C a C++ C a C++ C++ Přičtení hodnoty DWORD do proměnné __int64 American English version English version

Aktivity (1)
Avatar
Caster
Člen
Avatar
Caster:10. května 1:11

Při čtení souboru 6 GB funkcí ReadFile (na 3x; jedno čtení max. 2 501 566 399 bytů) mi při každém čtení vrátí počet načtených bytů v proměnné DWORD. Potřebuji tutuo hodnotu přičíst k proměnné __int64, výsledkem je ale nyní vždy 0. Velikost souboru před jeho čtením zjistím pomocí GetFileAttribu­tesEx.

Jak provést konverzi hodnoty DWORD na __int64 ?

__int64 nacteno = NULL;
DWORD bytes_read;
nacteno += bytes_read;
 
Odpovědět 10. května 1:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Caster
DarkCoder:10. května 8:57

Proměnná nacteno není ukazatel. Chceš-li její hodnotu nastavit na nulu, zadej v inicializaci 0 nikoli NULL.

__int64 nacteno = 0;

Ve výrazu:

nacteno += bytes_read;

jsou uplaťnována dvě pravidla:
Podpora typu a Konverze typu při přiřazení. Jelikož je typ __int64 vyšší nežli DWORD, dochází tak k implicitní konverzi proměnné bytes_read na typ __int64.

Při výpisu pomocí funkce printf() je třeba uvést přesný specifikátor konverze. Pro typ __int64 to je %I64d.

A tedy:

__int64 nacteno = 0;
DWORD bytes_read = 2000000000;
unsigned char i;

for(i=0; i<3; i++) nacteno += bytes_read;
printf("%I64d\n", nacteno);
Nahoru Odpovědět 10. května 8:57
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Caster
Člen
Avatar
Odpovídá na DarkCoder
Caster:10. května 9:53

Díky, pomohlo to, jsem začátečník ;-).

 
Nahoru Odpovědět 10. května 9:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.