![]() |
|
|
![]()
|
|
| HellanD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: нет Всего: 2 |
Привет ВСЕМ! Хелп ми плиз! Расскажу немного про тему работы: Я создаю программу в среде C++ Bulider выполняющюю помехоустойчивое кодирование (а так же декодирование текстов). Кодирующая часть уже готова. А вот с декодированием... Вот в чем суть: Если скажем переводить текст в цифру (скажем в АСКИ) то его размер значительно растет(ведь одному символу соответствует просто 8 бит) А созданая программа работает со строками текста. И это означает что при декодировании необходимо узнать где оканчиваеться "оригинальная" строка. Для этого конец каждой кодированой строки уже дополнен флагом типа "01111111" После чего строкой кодированого текста считается строка оканчивающаяся флагом Так вот при работе с англ текстом алгоритм пашет(т.е. исходный закодированый текст был англ), а вот с русским он просто не ищет флаги!!! Не знаю че делать ! Как заставить его искать флаги!! Посмотрите текст программы: void __fastcall TForm1::DecodeClick(TObject *Sender) { String theString=""; Coder coded; for(int i=0;i<=Crypted->Lines->Count;i++){ if(Crypted->Lines->Strings[i].AnsiPos("01111111")==0) theString+=Crypted->Lines->Strings[i]; if(Crypted->Lines->Strings[i].AnsiPos("01111111")!=0) theString+=Crypted->Lines->Strings[i]; { theString+=Crypted->Lines->Strings[i]; ShowMessage(theString); //coded.setCodeToString(theString); //RichEdit_ishodnij->Lines->Add(coded.deASCII()); theString=""; } } //RichEdit_ishodnij->Lines->Add(coded.deASCII()); } //--------------------------------------------------------------------------- |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
ну так пройдись по коду отладчиком и посмотри в чем именно проблема.
для справки: латинские символы вмещаются в 7 бит; русские -- в 8... проще, наверное, сначала кодировать текст в Base64... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| HellanD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: нет Всего: 2 |
Там суть в том что при тестировании с английскими буквами все ОК. А вот ри переходе на русский не получаеться загрузить в класс точно все символы до флага(с англ вариантом все ОК).
И проблема тут не в колличестве бит а в том что не правильно загружаеться строка. (Загружаеться не до флага!!!! а до конца строки) (об этом подсказал мне последний ShowMessage Кто нибудь!!!!! |
|||
|
||||
| ZIlya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
Как одна из возможных причин:
при русских символах в закодированной строке может получиться символ с кодом 0 (он же '\0')то есть конец строки и программа считает строку только до него |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
ну так берем дебаггер и смотрим почему она неправильно загружается -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| HellanD |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: нет Всего: 2 |
Спасибо всем за помощь! Проблему я смог понять и решить:
Она заключалась в том что выбраный флаг "01111111"(см по коду) подходит для англ символов , а вот в русских проблемма возникала например при появлении буквы "я" ("11111111") , в этом случае если перед я стоял код заканчивающийся на 0 то мы получали лишний флаг!!!! Я просто изменил флаг на 2- байтный и теперь все ОК!!!!! Еще раз спасиба за помощь!!!! |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |