I always pack my alarms in bits of arrays of alarm words. I usually also loop through the array of alarm words and when an active bit is found, I convert that to its decimal representation of place within the bit array. For example, if Alarm[10].6 is ON and the Alarm is an array of 32 bit words, then the decimal value of the alarm = Word * 32 + bit = 326.
I like using bits for compactness, and like Peter mentioned, it allows you to OR, XOR, & AND your alarms for easy handling, but then having the integer value makes for easy interface to a message display, if you are like me and avoid FactoryTalk alarms like the plague.