gpt4 book ai didi

random - 在 Ada 中转换数字

转载 作者:行者123 更新时间:2023-12-02 06:05:02 25 4
gpt4 key购买 nike

我想知道如何将整数转换为 long_integer 以及将 long_integer 转换为 Positive_Count。我尝试过的每一种方法都会给我带来错误,即使在这种情况下转换应该很容易。

例如,做

long := long_integer(int1) + long_integer(int2);

有时即使两个整数都是正数,也会使 long 成为负值。

我正在运行的函数的代码,分割步骤以进行调试:

--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("0123456789abcdef",k);
calcKey("0123456789abcdef",k);
calcKey("0123456789abcdef",k);
calcKey("0123456789abcdef",k);
calcKey("fedvba9876543210",k);
calcKey("fedvba9876543210",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

最佳答案

之前的答案对于检查整数大小的需要(以及正确的方法)是正确的。

或者,定义您自己的整数类型并解决“问题”!

但是,如果整数加法溢出并返回负数,则说明您没有使用 Ada 编译器!

不幸的是,Gnat 默认情况下不是 Ada 编译器。

使用 Gnat,您需要设置编译器标志来启用溢出等检查,默认情况下应该启用这些检查。然后,这样的溢出将引发 Constraint_Error 异常,并显示一条消息,直接指向失败的代码行 - 使测试比对出错的地方进行逆向工程要容易得多!

gnatmake -gnataeEfoUv -fstack-check my_main.adb

是一个相当全面的集合,可能包括一些您不需要的样式检查:查看 Gnat 文档以获取更多详细信息。

欢迎对首选标志集提出其他建议。

如果您使用其他编译器,我很想知道它是什么。

顺便说一句,您没有提供 StringToInt 函数,因此没有其他人可以测试您的示例,但我要指出的是,它生成的值与我从您提供的字符串中期望的值非常不同......是吗?随机哈希生成器?

关于random - 在 Ada 中转换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com