我有一个带有2个值type Polarity is (Normal, Reversed)的Ada枚举,我想将它们分别转换为0、1(或True,False,因为Boolean似乎隐式地像二进制一样玩),因此我可以将它们的值存储为一个字节。我该怎么做?

最佳答案

一种简单的方法是查找表:

Bool_Polarity : constant Array(Polarity) of Boolean
              := (Normal=>False, Reversed => True);

然后将其用作
 B Boolean := Bool_Polarity(P);

当然,使用'Pos属性并没有错,但是LUT使映射可读且非常明显。

由于它是恒定的,您希望它在恒定的折叠阶段能够优化,并且似乎:我使用了类似的技巧为AVR进行编译,具有可接受的可执行文件大小(最小为0.6k可以独立驱动2个步进电机)

关于enums - 将Enum转换为Binary(通过Integer或类似的方法),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13694909/

10-13 02:10