Показать сообщение отдельно
Старый 12.04.2011, 18:16   #18
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Вот слегка измененный вариант, позволяет указывать кодировки при вызове функции, ее так же можно использовать при вводе данных для последующей обработки, только поменять местами CP_UTF8 и 866.

Код:
char* str_convert(const char *buf, UINT codepage_from, UINT codepage_to)
{
	wchar_t* pResw = 0;
	char* pRes = 0;
	int res_len = 0;
	res_len = MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, 0, 0);
	if (!res_len)
		return NULL;
	pResw = new wchar_t[res_len];
	if (!MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, pResw, res_len))
	{
		delete[] pResw;
		return NULL;
	}
	res_len = WideCharToMultiByte(codepage_to, 0, pResw, -1, 0, 0, 0, 0);
	if (!res_len)
		return 0;
	pRes = new char[res_len];
	if (!pRes)
		return NULL;
	if (!WideCharToMultiByte(codepage_to, 0, pResw, -1, pRes, res_len, 0, 0))
	{
		delete[] pRes;
		return NULL;
	}
	delete[] pResw;
	return pRes;
}
И не забываем удалять строку после использования:
Код:
int _tmain(int argc, _TCHAR* argv[])
{
	char* str = str_convert("some text", CP_UTF8, 866);
	printf("%s\n", str);
	delete[] str;

	return 0;
}

Последний раз редактировалось Йоха; 12.04.2011 в 18:29.
Йоха вне форума   Ответить с цитированием