Есть программка которая с бинарного файлика считывает данные. Тип данных не известен. Пока не дойдешь до секции файла, где и будет содержаться инфа о типе содержащихся данных. Для каждой секции файла, программка создает объект класса, и вписывает туда значения, так как тип изначально не известен то в классе массив значений определен как:
После того, как тип дальнейших данных выясняется, массив vals, определяется под конкретные данные:
| Код | void defineArray(int count){ switch(typeOfValue){ case charType:{ vals = calloc(count,BYTES_IN_CHAR); };break; case intType:{ vals = calloc(count,BYTES_IN_INT); };break; case realType:{ vals = calloc(count,BYTES_IN_REAL); };break; case doubleType:{ vals = calloc(count,BYTES_IN_DOUBLE); };break; }; }
|
В случаях с intType, realType и doubleType все норм. А вот когда дело касается charType, все плохо. Данные типа char в файлике это записи по 8 символов (константа BYTES_IN_CHAR=8). При определении считывание значения в класс, оно пишется при помощи метода:
| Код | void KeyWord::defineCharVal(char *val, int ind){ char *arr = (char*)vals; for (int i = 0; i < BYTES_IN_CHAR; i++) { arr[ind*BYTES_IN_CHAR+i]=val[i]; } delete[] val;
}
|
а считывается:
| Код | char* KeyWord::getCharVal(int ind, int &count){ char *arr = (char*)vals; count = BYTES_IN_CHAR; char *ret = new char[BYTES_IN_CHAR]; for (int i = 0; i < count; i++) { ret[i]=arr[ind*BYTES_IN_CHAR+i]; } return ret; }
|
Так вот, в defineCharVal приходит нормальное значение, а вот считывается фигня... Помогите плиз, что может быть не так? Ведь с другими типами все норм...
|