Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Почему выводится неправильное число (указатели)?   Найти похожие ветки 

 
Некто   (2015-01-24 12:58) [0]


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 байта этих данных.
Почему выводится неправильное число в первом случае?


 
Inovet ©   (2015-01-24 13:26) [1]

Потому что
123456789(10) = 075BCD15(16)
а
15(16) = 21(10)


 
junglecat ©   (2015-01-24 13:28) [2]

в 1-м случае число обрезается до размера Byte, приведение к DWORD особой роли не играет
проверь
ShowMessage(IntToStr(Byte(123456789)));


 
Некто   (2015-01-24 14:28) [3]

Ясно. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1427465762
Token
2015-03-27 17:16
2017.01.15
Как задать имя файла компиляции


3-1310747259
Дмитрий
2011-07-15 20:27
2017.01.15
Вылет при изменении данных в гриде (Eh)


2-1419021247
AlexeyTG
2014-12-19 23:34
2017.01.15
Просьба оценит "корявость кода" v3


15-1451770205
Юрий
2016-01-03 00:30
2017.01.15
С днем рождения ! 3 января 2016 воскресенье


2-1424793636
TYMON
2015-02-24 19:00
2017.01.15
Intraweb Подключение к базе через ADO