Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Кодирование (а точнее декодирование)


Автор: HellanD 16.5.2006, 09:03
 smile
Привет ВСЕМ! 
Хелп ми плиз!
Расскажу немного про тему работы:
Я создаю программу в среде 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 16.5.2006, 10:16
ну так пройдись по коду отладчиком и посмотри в чем именно проблема.
для справки: латинские символы вмещаются в 7 бит; русские -- в 8...
проще, наверное, сначала кодировать текст в Base64... 

Автор: HellanD 16.5.2006, 20:26
Там суть в том что при тестировании с английскими буквами все ОК. А вот ри переходе на русский не получаеться загрузить в класс точно все символы до флага(с англ вариантом все ОК).
И проблема тут не в колличестве бит а в том что не правильно загружаеться строка. (Загружаеться не до флага!!!! а до конца строки)
(об этом подсказал мне последний ShowMessage smile ) Плиз хелп!!
Кто нибудь!!!!! 

Автор: ZIlya 17.5.2006, 09:44
Как одна из возможных причин:
при русских символах в закодированной строке может получиться символ с кодом 0 (он же '\0')то есть конец строки и программа считает строку только до него 

Автор: _hunter 17.5.2006, 10:43
Цитата(HellanD @  16.5.2006,  20:26 Найти цитируемый пост)
И проблема тут не в колличестве бит а в том что не правильно загружаеться строка.

ну так берем дебаггер и смотрим почему она неправильно загружается 

Автор: HellanD 17.5.2006, 11:28
Спасибо всем за помощь! Проблему я смог понять и решить:
Она заключалась в том что выбраный флаг "01111111"(см по коду) подходит для англ символов , а вот в русских проблемма возникала например при появлении буквы "я" ("11111111") , в этом случае если перед я стоял код заканчивающийся на 0 то мы получали  лишний флаг!!!!
Я просто изменил флаг на 2- байтный и теперь все ОК!!!!!
Еще раз спасиба за помощь!!!! smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)