Zamilovat si programování Zamilovat si programování
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací

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.5.2018 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.5.2018 1:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Caster
DarkCoder:10.5.2018 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.5.2018 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.5.2018 9:53

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

 
Nahoru Odpovědět 10.5.2018 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.