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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
11.02.2012, 12:58     Как перевести строку в читабельный вид? #1
Собственно из названия темы. Есть строка символов (к примеру такая: 0430002004370430043904340438)
Как перевести ее в читабельный вид, т.е в текст. Уже всю голову сломал Подскажите что прочитать(ссылочку если можно)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
11.02.2012, 20:43     Как перевести строку в читабельный вид? #21
Я вообще к чему вёл - вот к примеру взять широкоизвестный формат RTF, предлагаю посмотреть скрин и понять что понимал под таблицей соответсвия
Миниатюры
Как перевести строку в читабельный вид?   Как перевести строку в читабельный вид?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
11.02.2012, 23:09     Как перевести строку в читабельный вид? #22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Я хотел от него смс чтобы можно было построить таблицу соответсвия
Я, как программист, понимаю, что ты от него хотел. А он, как не программист - не понял. А нужно-то было один раз потратить пару лишних минут на внятное объяснение

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
это если и коды UTF-8 то возможно я неправильно их переводил,Evg, натолкни на мысль
На какую мысль? Я как бы в вопросах кодировок практически ничего не понимаю, особенно по части юникода. Просто вбил в гугл "перевод из юникода в win1251" или что-то типа того, взял готовый код и воткнул в программу, не особенно понимая, что там делается

Добавлено через 1 минуту
Кстати, ТС по ходу не выдержал и пропал. А был-то всего в одном шаге от решения своей проблемы
-=ЮрА=-
11.02.2012, 23:17
  #23

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Кстати, ТС по ходу не выдержал и пропал. А был-то всего в одном шаге от решения своей проблемы
- угуМожет всё таки он вернётся, буду надеятся на это, т.к. задание мне понравилось

Цитата Сообщение от Evg Посмотреть сообщение
Я, как программист, понимаю, что ты от него хотел. А он, как не программист - не понял. А нужно-то было один раз потратить пару лишних минут на внятное объяснение
- с этим у меня иногда сложности, надо бы поработать над собой!

dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
12.02.2012, 00:30  [ТС]     Как перевести строку в читабельный вид? #24
Цитата Сообщение от Evg Посмотреть сообщение
Кстати, ТС по ходу не выдержал и пропал
неправда это

-=ЮрА=-, Evg, огромное спасибо за помощь
-=ЮрА=-
12.02.2012, 00:33
  #25

Не по теме:

dimmu, дык ещё ж не помогли тебе, ты смог уловить мысль за таблицу соответсвия???

dimmu
12.02.2012, 00:42  [ТС]
  #26

Не по теме:

Еще как помогли. остальное завтра додумаю.поздно уже

Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 00:44     Как перевести строку в читабельный вид? #27
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты смог уловить мысль за таблицу соответсвия
Зачем она нужна, когда есть WideCharToMultiByte?
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 00:50     Как перевести строку в читабельный вид? #28
Цитата Сообщение от Evg Посмотреть сообщение
когда есть WideCharToMultiByte?
Evg, ну ты же видел я её применил(пост 19) и вышла билеберда, возможно коды в той смс-ке идут с каки-то смещением. Вот к примеру u0432 означает что код символа должен быть 432 - нет такого
ИМХО легче вбить таблицу перевода чем юзать функцию, ну как по мне проще, вот
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 10:36     Как перевести строку в читабельный вид? #29
А ты видел мой код и приписку, идущую далее? u0432 в случае little-endian при распиливании на два байта выглядит как 0x32, 0x04, но не 0x04, 0x32

Программу твою я не смотрел, но посмотрев, вижу какую-то фигню. У меня есть дикое подозрение, что в файле нету никаких последовательностей типа "\u", в файле должны лежать только набор байтов (а точнее, набор wchar'ов)

А следующую последовательность кодов мой моск попросту отказывается понимать:

C
1
2
3
4
5
6
7
8
9
10
11
WCHAR  *lpw = new WCHAR[2];
WCHAR  *add = 0;
long nchr = 0;
 
while (...)
{
  lpw[nchr] = code;
  nchr++;
  ...
  lpw[nchr] = add[0];
}
мне непонятно, как можно в цикле с большим количеством итераций загонять данные в массив из двух элементов. Не говоря уж о том, что тут вообще делается
dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
12.02.2012, 11:27  [ТС]     Как перевести строку в читабельный вид? #30
Цитата Сообщение от Evg Посмотреть сообщение
Код функции unicode_to_1251
кодблокс предлагает выбрать язык файла (пунки С/С++ source), если я выбираю С, код компилируется и работает, выбираю С++ - нет.
сейчас пробую char к whar_t привести
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 11:39     Как перевести строку в читабельный вид? #31
Вот программа. В верхнее поле ввода вбиваем строку "0430002004370430043904340438", жмём кнопку "Convert", в нижнем поле читаем результат. Исходники, если кому-то интересно, прилагаются (у себя использовал borland builder 2007)
Вложения
Тип файла: rar sms-decoder.rar (224.5 Кб, 7 просмотров)
Тип файла: rar sms-decoder-src.rar (7.2 Кб, 6 просмотров)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 11:40     Как перевести строку в читабельный вид? #32
Цитата Сообщение от dimmu Посмотреть сообщение
выбираю С++ - нет
Для Си++ надо явное преобразование указателей делать
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 12:07     Как перевести строку в читабельный вид? #33
Evg, теперь я кажется понял
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
WideCharToMultiByte(CP_ACP
Цитата Сообщение от Evg Посмотреть сообщение
WideCharToMultiByte(
* * * * * * * * 1251,
Сейчас опробую свой код с преобразованием в CP_UTF, думаетя мне у меня строка ещё раз кодировалась
dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
12.02.2012, 13:26  [ТС]     Как перевести строку в читабельный вид? #34
Цитата Сообщение от Evg Посмотреть сообщение
надо явное преобразование указателей делать
можно примерчик? никак не пойму что получиться должно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 13:29     Как перевести строку в читабельный вид? #35
Цитата Сообщение от dimmu Посмотреть сообщение
можно примерчик? никак не пойму что получиться должно
Чтобы не играть в испорченный телефон, покажи код и покажи ошибку, которую выдаёт компилятор
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 14:17     Как перевести строку в читабельный вид? #36
Цитата Сообщение от Evg Посмотреть сообщение
мне непонятно, как можно в цикле с большим количеством итераций загонять данные в массив из двух элементов. Не говоря уж о том, что тут вообще делается
- я делаю динамический realloc памяти в плюсах
всё просто изначально есть массив из 2-х элементов lpw, 1-й инициализировали а указатель на 2-й приравниваем адресу вновь выделяемого массива из 2-х элементом коим является add и так циклически расширяем размер блока. Ошибка у меня в преобразовании кода в код WCHAR
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
lpw[nchr] = code;
- получается что code = 430 а код WCHAR 1070, я уже сломал мозг как запихнуть коды в массив lpw
Миниатюры
Как перевести строку в читабельный вид?  
dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
12.02.2012, 16:41  [ТС]     Как перевести строку в читабельный вид? #37
изначально
Код
error: cannot convert `char*' to `wchar_t*' for argument `1' to `char* unicode_to_1251(wchar_t*)'
с помощью MultiByteToWideChar пытаюсь перевести в wchar_t. Компилируется, но в файле несколько символов получается: = ???????

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
{
    char *res;
    FILE *fp;
    char str[] = {0x3D,0x04,0x20,0x00,0x3E,0x04,0x3A,0x04,0x39,0x04,0x34,0x04,0x38,0x04,0x00,0x00 };
    wchar_t *Whr=new wchar_t;
    MultiByteToWideChar(1251, 0, str,strlen(str),Whr,strlen(17));
    fp = fopen ("D:\\a.txt", "wt");
    fprintf (fp, "%s\n",unicode_to_1251 (Whr));
    fclose (fp);
    return 0;
}
Добавлено через 9 минут
mbstowcs() тоже самое
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 22:13     Как перевести строку в читабельный вид? #38
dimmu, в своём примере ты делаешь два преобразования, а нужно делать только одно. Правда я не осилил два последних параметра в вызове MultiByteToWideChar

Цитата Сообщение от dimmu Посмотреть сообщение
с помощью MultiByteToWideChar пытаюсь перевести в wchar_t
Конкретно на этот вопрос. Писать следует "MultiByteToWideChar (... (wchar_t*)str, ...)"
dimmu
0 / 0 / 0
Регистрация: 11.02.2012
Сообщений: 15
12.02.2012, 22:33  [ТС]     Как перевести строку в читабельный вид? #39
офтоп
Цитата Сообщение от dimmu Посмотреть сообщение
strlen(17)
сам только заметил

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
int MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out LPWSTR lpWideCharStr, - я так понимаю тут должен быть указатель на массив.или я не прав
__in int cchWideChar
);


Цитата Сообщение от Evg Посмотреть сообщение
ты делаешь два преобразования
что-то я не пойму ход Ваших мыслей как два
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 22:52     Как перевести строку в читабельный вид?
Еще ссылки по теме:

Перевести длинную бинарную строку в строку с десятичными цифрами C++
Как перевести строку из string в char? C++
Как перевести строку в hex и обратно? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,129
Записей в блоге: 26
12.02.2012, 22:52     Как перевести строку в читабельный вид? #40
Цитата Сообщение от dimmu Посмотреть сообщение
я так понимаю тут должен быть указатель на массив.или я не прав
Я перепутал названия WideCharToMultiByte, который был в моём коде (который я содрал в инете) и MultiByteToWideChar

Цитата Сообщение от dimmu Посмотреть сообщение
что-то я не пойму ход Ваших мыслей как дв
В примере из поста #37 ты сначала вызываешь MultiByteToWideChar (к слову говоря, в качестве 5-го параметра ты подаёшь указатель на как бы массив из одного элемента), затем вызываешь unicode_to_1251, который содержит в себе WideCharToMultiByte.

И очень убедительная просьба. Не ленись тратить лишние 5 минут на то, чтобы чётко и внятно ставить вопросы. Потому что правильно поставленный вопрос - это уже половина ответа. А из твоих поставленных вопросов я даже проблему понять не могу, приходится что-то додумывать
Yandex
Объявления
12.02.2012, 22:52     Как перевести строку в читабельный вид?
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru