![]() |
|
#1
|
|||
|
|||
![]() type
Type1 = array [0..43] of longword; Type2 = array [0..15] of byte; ... implementation type PLongWord = ^LongWord; ... procedure Procedure1(const K: Type2; var EK: Type1); overload; var ... begin ... EK[0] := PLongWord(@K[0])^; end; Пример1: K = 49 50 51 52 53 54 55 56 57 48 49 50 51 52 53 54 K[0] = 49 @K[0] = 0012F5D8 EK[0] = 875770417 Пример2: K = 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 K[0] = 49 @K[0] = 0012F5D8 EK[0] = 825307441 Кто знает, объясните, пожалуйста, в чем фокус? Откуда берется эта разница? Последний раз редактировалось darkfox, 07.01.2011 в 12:54. |
#2
|
||||
|
||||
![]() Никакого фокуса нет.
K[0] - первый байт. @K[0] - адрес массива в памяти. EK[0] - первые 4 байта массива K, считаемые как одно число из 4 байт. В первом примере у тебя EK[0] выглядит как $34333231 = 52 51 50 49 = 49+50*256+51*65536+52*65536*256 = 875770417 А во втором $31313131 = 49 49 49 49 = 49+49*256+49*65536+49*65536*256 = 825307441. Только что проверил на калькуляторе. Все верно. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 07.01.2011 в 15:59. |
#3
|
|||
|
|||
![]() Спасибо большое!!!
|