Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как перевести строку в читабельный вид? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка конструктора копирования и оператора присвоения http://www.cyberforum.ru/cpp-beginners/thread444377.html
Всем привет, сразу к делу. После прочтения 11 главы Лафоре столкнулся с такой бедой как понятие перегрузка оператора присвоения. Дело в том что Лафоре говорит что именно оператор присвоения является...
C++ Дальнейшее изучение С++ Вот хотел у вас спросить, что дальше можно почитать после Бьярне Страуструп Программирование: принципы и практика использования C++, и после Р.Лафоре ООП в С++, планирую купить по WinApi и что то еще... http://www.cyberforum.ru/cpp-beginners/thread444347.html
полноэкранный режим консоли C++
Здравствуйте! Не могли бы подсказать, как программно переходить в полноэкранный режим в консоле? (Именно переходить, а не получать информацию, является ли режим полноэранным) Добавлено через...
C++ Преобразовать выражение в постфиксную форму
Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции. Обычная запись...
C++ Построить некоторый Автомат на три команды http://www.cyberforum.ru/cpp-beginners/thread444324.html
Некоторый автомат может запросить два числа и выполнить 3 команды. Команда А преобразует имеющуюся пару чисел (х, у) в (х-у,у), команда В преобразует пару чисел (х,у) в пару (х+у,у), команда С...
C++ Векторы Определите полусумму длин двух векторов А(1,5; 2,5; -0,3) и В(-11,7; -9,3; 2,5; 3,7; -1,2). Вычислите, длины вектора оформив в виде функции. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,193
Записей в блоге: 27
11.02.2012, 18:16
Извините, не удержался. Я традиционно ничерта не понимаю, как заставить под виндой в консоли печатать нормальные русские буквы, а потому текст сбрасываю в файл. Код функции unicode_to_1251 содрал в инете, автор - npak. В файл у меня записалось "а зайди", что говорит о том, что перекодирование сделано правильно. Надеюсь, до ума программу доведёте сами

C
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <windows.h>
#include <stdio.h>
 
static char * unicode_to_1251(wchar_t *unicode_string)
{
    int err;
    char * res;
    int res_len = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        NULL,               // No buffer yet, allocate it later
        0,                  // No buffer
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (res_len == 0)
    {
//      printf("Failed to obtain required cp1251 string length\n");
        return NULL;
    }
    res = (char*) calloc(sizeof(char), res_len);
    if (res == NULL)
    {
//      printf("Failed to allocate cp1251 string\n");
        return NULL;
    }
    err = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        res,                // Output buffer
        res_len,            // buffer size
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (err == 0)
    {
//      printf("Failed to convert from unicode\n");
        free(res);
        return NULL;
    }
    return res;
}
 
int main(int argc, char* argv[])
{
    char str[] = { 0x30, 0x04, 0x20, 0x00, 0x37, 0x04, 0x30, 0x04,
                   0x39, 0x04, 0x34, 0x04, 0x38, 0x04, 0x00, 0x00 };
    FILE *fp;
 
    fp = fopen ("C:\\a.txt", "w");
    fprintf (fp, "%s\n", unicode_to_1251 (str));
    fclose (fp);
 
    return 0;
}
Добавлено через 1 минуту
Если кто-то будет доводить до ума, надо учесть, что пары 16-ричных чисел надо писать в массив в обратном порядке (из-за little endian на i386)
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru