{ int i=0,j=0; this->Num=0; // Сколько всего различных сиволов в строке DWORD symbolNumber[1 << (sizeof(TCHAR)*8)]; ZeroMemory(symbolNumber, sizeof(symbolNumber)); for(int i = 0; i < m_Data.GetLength(); i++) { symbolNumber[ (int)((_TUCHAR)m_Data[i]) ]++; } for(i=0;i<(1 << (sizeof(TCHAR)*8));i++) if(symbolNumber[i]) Num++; //---------------------------------- this->info = new struct tagInfo[Num]; j=0; for(i=0;i<(1 << (sizeof(TCHAR)*8));i++) { if(symbolNumber[i]) { info[j].ch=i; info[j].Code=i; info[j].P = ((float)symbolNumber[i])/((float)m_Data.GetLength()); j++; } } //----------------------------------*/ for(i=0;i<Num;i++) info[i].NBit = log(1.0f/info[i].P)/log(2);