Yes, in LDAP, everything is a string or a byte[]. You essentially take your pick. If you look closely at the S.DS.P API, you'll see that you can convert any attribute to either string or byte[] and can supply the values either way as well.
Generally, you use strings for everything unless the string contains unprintable characters or nulls.
One of the most useful tools I've found for learning this is Microsoft's LDP.exe tool, especially if you can find a recent build (2008 server) that has the "raw string" option for display. When you use that option, the tool turns off its built in data conversion stuff and just shows the raw value as it gets sent on the wire.
It is a little weird at first, but once you get used to it you admire the simplicity. :)
Generally speaking, I like to use generalized time attribute syntax for my own custom dates because the values are human readable and still sort nicely. The only reason MS uses FILETIME in AD is because it is such a core OS data structure and many legacy SAM APIs use it. However, if you are comfortable with it in your own code, that's cool.