Мне интересно, как преобразовать целое число в long_integer и long_integer в Positive_Count. Каждый способ, который я пробовал, дал мне и ошибку, хотя преобразование должно быть простым в этом случае.Преобразование чисел в Ada
Например, делая
long := long_integer(int1) + long_integer(int2);
сделает долго отрицательное значение иногда даже если оба целое были положительными.
Код функции Я бегу, шаги расколоть для отладки:
--calcKey--
procedure calcKey(x: in String16; key: out External_IO.Positive_Count) is
s1, s2 : String2;
int1, int2 : integer;
long1, long2 : long_integer;
begin
s1 := x(12..13);
s2 := x(15..16);
put_line("s1: " &s1& "- s2: " &s2);
int1 := abs StringToInt(s1);
int2 := abs StringToInt(s2);
put("int1: " & Integer'image(int1) & " | int: " & Integer'Image(int2)); new_line;
long1 := long_integer(int1);
long2 := long_integer(int2);
long1 := long1 + long2;
put_line("long := " & long_integer'Image(long1));
long1 := (long1 mod 256) + 1;
key := External_IO.Positive_Count(long1);
put_line("Key : " & External_IO.Positive_Count'Image(key));
new_line;
end calcKey;
вызывающей функции:
calcKey("abcdef",k);
calcKey("abcdef",k);
calcKey("abcdef",k);
calcKey("abcdef",k);
calcKey("fedvba",k);
calcKey("fedvba",k);
Выход:
s1: bc- s2: ef
int1: 2011929758 | int: 1667393125
long := -615644413
Key : 4
s1: bc- s2: ef
int1: 287586 | int: 1667393125
long := 1667680711
Key : 200
s1: bc- s2: ef
int1: 13132642 | int: 1667393125
long := 1680525767
Key : 200
s1: bc- s2: ef
int1: 13132642 | int: 1667393125
long := 1680525767
Key : 200
s1: 43- s2: 10
int1: 13120308 | int: 859058225
long := 872178533
Key : 102
s1: 43- s2: 10
int1: 6697780 | int: 859058225
long := 865756005
Key : 102
Да. Целое и Long_Integer имеют одинаковый размер. Спасибо. – user1279914