Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / CharToOemBuff / 14 сообщений из 14, страница 1 из 1
21.11.2006, 12:25
    #34143282
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
есть ли где-нибудь, кроме user32.dll, такая же функция или ее аналог?

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
21.11.2006, 13:04
    #34143471
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
WideCharToMultibyte
...
Рейтинг: 0 / 0
21.11.2006, 13:06
    #34143479
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
maXmoWideCharToMultibyte
то что надо, спасибо
...
Рейтинг: 0 / 0
21.11.2006, 13:16
    #34143519
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
ну и её упрощенная версия wcstombs
...
Рейтинг: 0 / 0
24.11.2006, 11:47
    #34152866
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
перевожу строку unicode в oem, вместо русских букв получаю знаки вопроса ????? , кто-нибудь знает как бороться.
Спасибо.
--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
24.11.2006, 11:59
    #34152943
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
код?
...
Рейтинг: 0 / 0
24.11.2006, 12:17
    #34153037
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
bool ConvertToOem(void)
{
//-- m_pBuffer объявлен как void*
	if(m_length) //------------------------------------------------- если есть что переводить
	{
		if(m_bIsWideChar) //--------------------------------------------------------- UNICODE
		{
			wchar_t* pCopyBuff = _wcsdup((const wchar_t*)m_pBuffer);
			if(pCopyBuff)//-------------------------------------------- копия успешно создана
			{//----------- узнаем сколько нужно места (в байтах) под сконвертированную строку
				int size = WideCharToMultiByte(CP_OEMCP, NULL, pCopyBuff, (int)m_length, (char*) m_pBuffer, NULL, NULL, NULL);
				if(size <=  0 )//------------------------------------------------------- ошибка
				{
					free(pCopyBuff); //----------------------------- освобождаем копию буфера
					pCopyBuff = NULL;
					return false;
				}
				free(m_pBuffer);
				m_pBuffer = malloc(size + sizeof(char));
				if(!m_pBuffer)
				{
					free(pCopyBuff); //----------------------------- освобождаем копию буфера
					pCopyBuff = NULL;
					return false;
				}
// производим конвертацию
				size = WideCharToMultiByte(CP_OEMCP, NULL, pCopyBuff, (int)m_length, (char*) m_pBuffer, size, NULL, NULL);
				if(size != (int)m_length) 
				{
					free(pCopyBuff); //----------------------------- освобождаем копию буфера
					pCopyBuff = NULL;
					return false;
				}
				free(pCopyBuff); 
				pCopyBuff = NULL;
//- добавив символ ограничитель
				((char*)m_pBuffer)[m_length] = '\0';
				return true;//------------------------------- преобразование строки выполнено
			}
		}
	}

и как быть с ANSI, неужели преобразовывать к UNICODE, для случая описаного выше, когда не надо пользоваться CharToOem(Buff)?

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
24.11.2006, 12:59
    #34153229
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
проверь, юникодный ли у тебя текст в строке и может ли он корректно отобразиться в оемной кодировке (GetOEMCP())
Cerebrumи как быть с ANSI, неужели преобразовывать к UNICODEможешь, конечно, нарисовать таблицу перевода :)
...
Рейтинг: 0 / 0
24.11.2006, 13:13
    #34153295
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
GetOEMCP() вернула 866

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
24.11.2006, 13:16
    #34153306
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
то что переводимая строка является строкой unicode, это 100%, т.к. я ее сам и задаю в виде
L"some_string_ляляля";
--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
24.11.2006, 13:27
    #34153345
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
нука скомпиль это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int main(void)
{
	wchar_t* wstr=L"asdфыв";
	char ostr[ 32 ];
	WideCharToMultiByte(CP_OEMCP, 0 ,wstr,- 1 ,ostr, 32 ,NULL,NULL);
	printf(ostr);
 return  0 ;
}
у меня работает как надо
...
Рейтинг: 0 / 0
24.11.2006, 13:35
    #34153375
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
да, работает

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
06.09.2007, 12:14
    #34780554
_Ildar_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
maXmoнука скомпиль это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int main(void)
{
	wchar_t* wstr=L"asdфыв";
	char ostr[ 32 ];
	WideCharToMultiByte(CP_OEMCP, 0 ,wstr,- 1 ,ostr, 32 ,NULL,NULL);
	printf(ostr);
 return  0 ;
}
у меня работает как надо

Как вместо
Код: plaintext
1.
L"asdфыв";
поставить переменную CString ?
...
Рейтинг: 0 / 0
06.09.2007, 13:46
    #34781140
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CharToOemBuff
а зачем? передавай напрямую в функцию
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / CharToOemBuff / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]