1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
with Unchecked_Conversion;
with Text_Io;
procedure Test is
type Value_T is range 0 .. 16#FFFF#;
for Value_T'Size use 16;
Value : Value_T;
type Field1_T is range 0 .. 16#F#;
for Field1_T'Size use 4;
type Field2_T is range 0 .. 16#3#;
for Field2_T'Size use 2;
type Field3_T is range 0 .. 16#3FF#;
for Field3_T'Size use 10;
type Record_T is
record
f1 : Field1_T;
f2 : Field2_T;
f3 : Field3_T;
end record;
for Record_T use
record
f1 at 0 range 12 .. 15;
f2 at 0 range 10 .. 11;
f3 at 0 range 0 .. 9;
end record;
Rec : Record_T;
function Conv is new Unchecked_Conversion(Source => Value_T,
Targe => Record_T);
begin
Value := 2#0011010000001100#; -- f1 = 3 , f2 = 1 , f3 = 12
Rec := Conv(Value);
Text_Io.Put_Line("F1 = " & Field1_T'Image(Rec.f1) &
"-- F2 = " & Field2_T'Image(Rec.f2) &
"-- F3 = " & Field3_T'Image(Rec.f3));
end Test; |
Partager