Neither of the structures posted are padded correctly. The compiler is therefore trying to be helpful and inserting additional padding behind the scenes to pad them correctly.
Here is an in depth article describing the issue:
http://en.wikipedia.org/wiki/Data_structure_alignment . In general, a structure member should be aligned on an offset that is a multiple of its size. For example, an Int32 (4 bytes) should be on a structure offset that is a multiple of 4. An Int16 (2 bytes) should be on a structure offset that is a multiple of 2. Additionally, the size of a structure should be a multiple of the largest data type contained within it. For example, a structure containing only 2 and 4 byte data types should have an overall size that is a multiple of 4. If an 8 byte data type (e.g. Float64) is added to the structure, the structure size must be a multiple of 8. If it is not a multiple of 8, the compiler will insert padding at the end of the structure. Another user had a padding relating issue a while back:
viewtopic.php?f=27&t=351&p=1296&hilit=padding#p1296
If you open the .xml files with a web browser, (e.g. Firefox), they should be displayed using a style sheet. At the bottom is a table which shows the structure field sizes and offsets. For each field, its offset must be a multiple of its size.
Regarding VIIRS_AOT_LUT.xml, for the field "aot", the offset is 328. This is correct because aot is a 4 byte data type and the offset of 328 is a multiple of 4. However, the field "scat_ang_incr" has an offset of 49730116. This is *not* divisible by 8. Therefore the compiler will insert a few bytes before scat_ang_incr to ensure that it is on an offset of 4 bytes. It looks like it would insert 4 bytes of padding before scat_ang_incr.
Regarding VIIRS_AOT_SUNGLINT_LUT.xml, all the fields are on the correct offset. However, the structure size is 32006588. Because the structure contains 8 byte data types, the size must be a multiple of 8. The size of 32006588 is *not* a multiple of 8. Therefore the compiler will insert an extra 4 bytes at the end of the structure to make it a multiple of 8. However, you'll notice that the last field is already a pad field named "pad" (however, the compiler doesn't know this). If that last field named "pad" is removed, the size of the structure becomes 32006584 which is a multiple of 8 and therefore not padding will need to be added.
In summary, I would recommend copying the pad field from VIIRS_AOT_SUNGLINT_LUT.xml and inserting it before scat_ang_incr in VIIRS_AOT_LUT.xml. I would then delete the pad field from VIIRS_AOT_SUNGLINT_LUT.xml. In each XML, you need to update the <NumberOfFields> tag and the <FieldOffset> tag.
Summary of changes in VIIRS_AOT_LUT.xml:
--Add a pad field of size 4 before scat_ang_incr
--Set the field offset of the new pad field correctly
--Set the field offset of scat_ang_incr correctly
--Set NumberOfFields correctly
Summary of changes in VIIRS_AOT_SUNGLINT_LUT.xml
--Remove the existing pad field
--Update NumberOfFields correctly
FYI, EBX will perform all the adding and removing of pad fields for you behind the scenes. It also makes sure that FieldOffset and NumberOfField tags are updated. It would be helpful to get it installed.

Technically, it is very easy to install Eclipse and use the EBX plugin. Just download "Eclipse IDE for Java Developers" version 3.7 Indigo from
http://www.eclipse.org/downloads/packag ... /indigosr2. Then use the runEBX.sh script. While it's not technically difficult, I understand that sometimes there are IT policies that can make it more challenging.
After you update the XML, you'll need to do a "make clean src library" in $ADL_HOME/xml. Then do a "make clean src library" in $ADL_HOME/CMN/Utilities/Dictionary/Entries/VIIRS/src. Then do a "make clean src library program" in your algorithm's directory. Alternatively, you can rebuild all of ADL.