NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

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

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
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.