Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перекодировать строку символов из кодировки, ANSI в кодировку ASCII (WIN ->DOS) 
:(
    Опции темы
Royan
Дата 15.5.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Парни привет!

Скажите пожалуйста как мне меньшей кровью перекодировать строку символов из кодировки ANSI в кодировку ASCII (кодировка window в кодировку DOS), в сях или WinAPI есть какая-нить подобная функция? Или там просто коды символом поменять?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Alastis
Дата 16.5.2005, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



В ANSI русские буквы кодируются числами от 192 до 255, а в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я). Думаю довольно просто написать свою функциюsmile


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Void
Дата 16.5.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Ф-ции WinAPI: CharToOem, CharToOemBuff (это Win->DOS), OemToChar и OemToCharBuff (DOS->Win) - это то, что вам нужно smile

Цитата(Alastis @ 16.5.2005, 09:01)
В ANSI русские буквы кодируются числами от 192 до 255, а в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я). Думаю довольно просто написать свою функциюsmile


Сколько я помню, русские буквы в CP866 идут не совсем в алфавитном порядке. Так что если уж писать перекодировку самому - то проще таблицу для диапазона 128..255 сделать (то что ниже - стандарт, который, кстати и называется ASCII).


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
CaptainFlint
Дата 18.5.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: нет
Всего: 23



Цитата(Void @ 16.5.2005, 19:17)
Сколько я помню, русские буквы в CP866 идут не совсем в алфавитном порядке.

Это в KOI-8 они идут не по порядку, а в 866 по порядку, только, как правильно заметил Alastis, диапазон там не целый, а "разорванный" на два куска.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
jonie
Дата 29.10.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



дааавно-давно делал так:
Код

void Dos2Win(uchar * lpBuffer){
    for (;*lpBuffer;lpBuffer++)    {
        if (*lpBuffer>=0x80 && *lpBuffer<=0xAF){
                *lpBuffer+=(0xC0-0x80);
        }
        else
            if (*lpBuffer>=0xE0 && *lpBuffer<=0xEF){
                *lpBuffer+=(0xF0-0xE0);
            }
    }
}

Код

void Win2Dos(uchar * lpBuffer){
    for (;*lpBuffer;lpBuffer++)    {
        if( (*lpBuffer>=0xC0) )    {
            *lpBuffer-=*lpBuffer<=0xEF?0x40:0x10;
        }
    }
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
BigHeart
Дата 19.3.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 17.3.2007

Репутация: нет
Всего: нет



Код

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
using namespace std;
char *WinToDos(const char *str1,char *str2)
      
{
    int i=0;
    for(;str1[i]!='\0';i++)
    {
        if((str1[i]>'a')&&(str1[i]<='п'))
            str2[i]=str1[i+192];
            
        else if((str1[i]>='p')&&(str1[i]<='я'))
           str2[i]=str1[i]+240;
        else
            str2[i]=str1[i];
    }
     str2[i]='\0';
     return str2;
    
}
void main()
{
    char str1[100];
    char str2[100];
    cin>>str1;
    cout<<WinToDos(str1,str2);
    
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.