Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
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
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.