add support for char16 fields (UTF16/UCS-2) as well as refactoring shared logic from byte/char into reusable helper