All pastes #24987 Raw Edit

Someone

public cpp v1 · immutable
#24987 ·published 2005-10-08 23:27 UTC
rendered paste body
int utf16toutf8(unsigned short* src, unsigned char* dest, int srclen) {    unsigned char* orgdest = dest;    for(i = 0; i < srclen; ++i, ++src) {        if(*src < 0x80) {            *dest++ = (unsigned char)*src;        } else if(*src < 0x800) {            *dest++ = 0xc0 | (unsigned char)(*src >> 6);            *dest++ = 0x80 | (unsigned char)(*src & 0x3f);        } else if((*src & fc00) == 0xd800 || *src > 0xffff) {            int code = *src;            if(code < 0x10000) {                if((src[1] & 0xfc00) != 0xdc00) { /* error */ }                code = ((code & 0x3ff) << 10) | (*++src & 0x3ff);            }            *dest++ = 0xf0 | (unsigned char)(*src >> 18);            *dest++ = 0x80 | (unsigned char)((*src >> 12) & 0x3f);            *dest++ = 0x80 | (unsigned char)((*src >> 6) & 0x3f);            *dest++ = 0x80 | (unsigned char)(*src & 0x3f);        } else {            *dest++ = 0xe0 | (unsigned char)(*src >> 12);            *dest++ = 0x80 | (unsigned char)((*src >> 6) & 0x3f);            *dest++ = 0x80 | (unsigned char)(*src & 0x3f);        }    }    return orgdest - dest;}