static void AssignStr(cString &dest, const char *start, const char *end, _locale_t locale) { dest.clear(); if (end <= start) { return; } static const int NBUF = 64; wchar_t buf[NBUF]; int nb = 0; size_t len = end - start; size_t initial = len + 1; // assume most characters are 1-byte dest.reserve(initial); const char *p = start; while (p < end) { int len = _mbtowc_l(&buf[nb++], p, end - p, locale); if (len < 1) { break; } p += len; if (p >= end || nb >= NBUF) { dest.append(buf, nb); nb = 0; } } }