To Codepoint
typedef unsigned int16 UTF16;
typedef unsigned int32 UTF32;
// constants
const UTF32 LEAD_OFFSET = 0xD800 - (0x10000 >> 10);
const UTF32 SURROGATE_OFFSET = 0x10000 - (0xD800 << 10) - 0xDC00;
// computations
UTF16 lead = LEAD_OFFSET + (codepoint >> 10);
UTF16 trail = 0xDC00 + (codepoint & 0x3FF);
UTF32 codepoint = (lead << 10) + trail + SURROGATE_OFFSET;