dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF
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."
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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.