If you look at the definition of each Type Descriptor, you have a minimum length as you have already stated which is type-dependent.  Integers, for example have a length of 4 Bytes followed by a single Byte indicating the length of the String used for the name.  When this 5th Byte (using an integer example) doesn't exist, there's no name.  When it's present and larger than zero, the following N Bytes represent the name.
The first two Bytes (or U16 if you wish) give the total length of the Type descriptor.  This includes type descriptor, name and so on.
U8 Example...
Byte sequence 00 14 40 05 0E 44 61 74 61 20 74 79 70 65 20 28 55 38 29 00 Gives a U8 Data type with the name "Data type (U8)" (Unless I mistyped a number of course 
😉 )
The first U16 gives the entire length (14 Hex = 20).  The second U16 gives the Type, even though the first byte can (must) be ignored (40 in this case).  The next byte (if there IS one) gives the length of the string used for the name (0E = 14).  If you've reached the end of the Type descriptor length without finding a string length entry, there isn't one.  The finyl 00 is simply rounding the TD to a multiple of 2.  If dealing with complex type descriptors like clusters (or arrays) you need to "cut" the individual items into the appropriate length (first two bytes, remember?) to avoid running over into the next type descriptor.....
AFAIK of course.  I have written quite a few variant parsers and this has always worked for me.
The Equivalent TD without a name would be
Byte sequence 00 04 40 05 Gives a U8 Data type with no name
Shane
Message Edited by shoneill on 02-12-2007 05:16 PM
					
				
			
			
				
	Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)