В рамках учебы есть задача написать программу которая кодирует текст методом Шеннона-Фано... На просторах интернет нашел исходники кода на С++.
Программа работает, но есть одно но ... Изучать С++ только начал в этом семестре. Сам посмотрел на код обработчика кнопки кодирования и не смог разобраться с большей половиной тех команд и инструкций, что там написано.
Можно помочь с коментариями к каждой строке ?
Книг у меня много .. но приходится лопатить их все ради понимания одной строки и еще не факт что разберусь в итоге ...
например со строкой - CShannonFanoEncoding sfe;
так и не разобрался для чего она и что делает ...
Вот код
void CShannonAppDlg::OnButtonEncode()
{
CShannonFanoEncoding sfe; // Возможно собственный класс стр 582
CString str;
int len, i;
unsigned char *sz; // без знаковое строковое (для улучшения переносимости программы, но ухудшает быстродействие)
if (m_table)
sfe.free_table(m_table, m_tableLen);
m_srcEdit.GetWindowText(str);
len = str.GetLength();
sz = new unsigned char[4096];
wcstombs((char *) sz, str, len + 1);
memset(m_buffer, 0, 4096);
str.Format(L"%d", len << 3);
m_srclenStatic.SetWindowText(str);
// encode
m_len = sfe.encode(sz, len, m_buffer, &m_table, &m_tableLen);
str.Format(L"%d", m_len);
m_outlenStatic.SetWindowText(str);
// output bit result
unsigned char *t = m_buffer;
unsigned char mask = 0x80, s = 7;
str.Empty();
for (i = 1; i <= m_len; i++)
{
str += (WCHAR) (((*t & mask) >> s) + L'0');
mask = mask >> 1;
s--;
if (mask == 0)
{
mask = 0x80;
t++;
s = 7;
}
}
m_outEdit.SetWindowText(str);
WCHAR szTemp[64];
m_codesList.AddString(L"----------");
// output codes
for (i = 0; i < m_tableLen; i++)
{
_itow(m_table[i]->code, szTemp, 2);
str.Format(L"%C - %s [len - %d] [count - %d]", m_table[i]->atom, szTemp, m_table[i]->len, m_table[i]->count);
m_codesList.AddString(str);
}
m_decodeButton.EnableWindow();
delete [] sz;
}
Готов оплатить услуги.. zwezda-11@mail.ru для первого контакта.. в теме желательно указать С++
Ответить
|