我有一个带有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/