Потребовалось для поддержки одного крайне старого проекта, где нельзя разом перейти на UTF-8 преобразовать кодировку из UTF-8 в CP-866
/**
* @brief Переводим из UTF-8 в CP866
* @param dst - по какому адресу пишем
* @param src - откуда берём строку, до первого '\0'
* @return длина dst
*/
uint32_t UTF8_CP866(char *dst, const char *src)
{
uint32_t i =0, j =0;
uint8_t cur, conv;
//-- Пробегаемся по всем символам, учитываем отличия между таблицами
for (i=0; src[i]!=0; ++i) {
cur = src[i];
if ( cur==208 || cur==209 ) {
conv = src[++i];
if ( cur==208 ) {
if ( conv>=144 && conv<192 ) { conv -= 16; }
} else {
if ( conv>=128 && conv<144 ) { conv += 96; }
}
dst[j++] = conv;
} else {
dst[j++] = cur;
}
}
dst[j] = 0;
return j;
}