I'm a little surprised/confused by your answer.
The data in reponse back contains the application tag as well as data length (section 20.2.1 in the standard), which can be used to determine what the data type is and process it, which means it shouldn't be necessary to guess. I would have thought that we should know what we are dealing with, with absolute certainty. Am I correct in saying that?
If I print the data in the AmbiguousValue to the console (which is of type binary value/inactive), I get this:
9 Indicates it is enumerated, 1 indicates the length, 0 indicates inactive.
If I print the data in the AmbiguousValue to the console (which is of type real/777.0), I get this:
First 4 indicates it is real, second 4 indicates 4 bytes, remaining 4 bytes is 777.0 in IEEE754-1985 format.
I am fine with peeking into the byte array to handle converting it to the relevant object, but I don't see any method which exposes the application type (or the byte array), which would be necessary if it were to be done without modifying any BACnet4J source files.
Of course, if the correct type could be determined in the first place, that would be better :D