![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему выводится неправильное число (указатели)?
Некто © (2015-01-24 12:58:00)
procedure TForm1.Button4Click(Sender: TObject);
var
PMyUint: PByte;
dwValue: DWORD;
begin
dwValue := 123456789;
GetMem(PMyUint, 123);
CopyMemory(PMyUint, @dwValue, SizeOf(dwValue));
ShowMessage(IntToStr(DWORD(PMyUint^))); // тут выводит 21
ShowMessage(IntToStr(PDWORD(PMyUint)^)); // а тут 123456789
FreeMem(PMyUint);
end;
В первом случае я использую разименование указателя, т.е он вроде бы должен указывать на число, а
приведение к типу DWORD берет первые 4 байта этих данных.
Почему выводится неправильное число в первом случае?
Некто (2015-01-24 14:28:00) [1]Ясно. Спасибо.
junglecat (2015-01-24 13:28:00) [2]в 1-м случае число обрезается до размера Byte, приведение к DWORD особой роли не играет
проверь
ShowMessage(IntToStr(Byte(123456789)));
Inovet (2015-01-24 13:26:00) [3]Потому что
123456789(10) = 075BCD15(16)
а
15(16) = 21(10)