В общем такая проблема: дан двоичный файл, я из него извлекаю слово и его номер. Если сразу выводить в текстовый файл, то все выглядит адекватно. Но мне надо воспользоваться исходным классом sortedCollection. Если используется метод insert в данном классе и делается вывод всего в текстовый файл, то меняется кодировка и выдаются не те символы. Номера остаются правильными, а слова меняются. Мне кажется, что проблема в кодировке. Подскажите, как поменять? Или в чем еще может быть проблема? Слова - набор символов. Вот пример одной из строк без использования класса:
+NOBL1 65479
С использованием класса:
P3Ѓ+X. 65479
Строку взял одну и ту же.
Без использования, повторюсь, выводит правильно.
Я использую собственную структуру с двумя полями. Char* и unsigned short. Полученный объект уже записываю в объект класса sortedCollection.
using namespace std;
struct cm
{
char* a;
unsigned short b;
};
class MyCollection :
public sortedCollection
{
public:
MyCollection(cc_Index limit, cc_Index delta) : sortedCollection(limit, delta) {
duplicates = True;
}
virtual void *keyOf( void *item )
{
return &(((cm*)item)->b);
}
virtual int compare (void *k1, void *k2 )
{
return *((unsigned short*)k1) - *((unsigned short*)k2);
}
void print(ofstream& f1){
f1<<"Q="<<count<<endl;
cm* dat;
for( int i = 0; i < count; i++ ){
dat = (cm *)at(i);
f1 << dat->a << " " << dat->b << endl;
}
f1.close();
}
};
void main()
{
char buf[8];
unsigned short count;
ofstream f1("cm.txt");
ifstream file("CM.dat",ios::binary);
if (!file)
{
cout<<"error"<<endl;
}
else
{
cout<<"OK"<<endl;
}
MyCollection msc(4,2);
file.read(buf,2);
count = (buf[0]<<8) | (buf[1]);
cout<<count<<endl;
_getch();
for (int i = 0; i < count ; i++)
{
cm* dat = new cm();
file.read(buf,8);
for (int j = 0; j < 8; j++)
{
if (buf[j] == ' ')
buf[j] = 0;
}
dat->a = new char[9];
strcpy(dat->a,buf);
file.read(buf,2);
unsigned short a;
a = (buf[0]<<8) | (buf[1]);
dat->b = a;
file.read(buf,2);
msc.insert(dat);
}
file.close();
msc.print(f1);
_getch();
}