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; } } }
static void AssignStr(cString &dest, const char *start, const char *end, _locale_t locale) { dest.clear(); dest.reserve(end - start); // assume most characters are 1-byte const char *p = start; while (p < end) { wchar_t wc; int len = _mbtowc_l(&wc, p, end - p, locale); if (len < 1) break; dest.push_back(wc); p += len; } }