преобразование из «double» в «DWORD», возможная потеря данных - PullRequest
0 голосов
/ 21 ноября 2011

Я добавил ресурс в свой проект.Его размер составляет 4,096 байт.мне нужно присвоить его DWORD, потому что это нужно 3-му аргументу функции WriteFile ().

WriteFile(hFile, pExeResource,size, &bytesWritten, NULL);

Поэтому я приведу его так:

UPDATE2: DWORD bootsize = 4096;// и все еще предупреждает меня, но я получаю это предупреждение.ты можешь мне помочь?

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Я думаю, что это сочетание региональных / языковых различий и синтаксиса C.

Я предполагаю, что вы подразумеваете 4.096 как 4,096 с разделителем запятых.(Из-за региональных / языковых различий вы, вероятно, используете . вместо ,.)

В C / C ++ вы не используете разделители.Просто сделайте это вместо:

DWORD bootsize = (DWORD)4096;
2 голосов
/ 21 ноября 2011

4.096 - это четыре и 96/1000-ые байты. Я думаю, что вы просто хотите 4096. Тогда вам не нужно кастовать. Как правило, вы не используете запятую или точку в числах в программировании, если вы действительно не обозначаете их как десятичную точку.

2 голосов
/ 21 ноября 2011

4.096 - это значение с плавающей запятой (типа double), чуть меньше 4,1, тогда как DWORD является целочисленным типом (обычно что-то вроде unsigned int).Естественно, вы теряете дробную часть значения с плавающей точкой в ​​преобразовании.(Возможно, вы имели в виду значение integer 4096 (без знаков препинания)?)

...