Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование типов

6.9K
09 октября 2004 года
fightcat
17 / / 07.09.2004
Хелп, люди!
У меня есть типизированный файл, залитый сишной программой. У меня есть только структура. И там данные, которые по определению должны быть числовыми (ну например, число, или номер месяца), хранятся как char, или там unsigned char. Ну, я типы данных на дельфевые поменял - по размеру все сходится, строковые данные достаются - а вот что с этими числами делать - не ясно. Че только уже не пробовал - все муть какая-то!
302
09 октября 2004 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by fightcat
Хелп, люди!
У меня есть типизированный файл, залитый сишной программой. У меня есть только структура. И там данные, которые по определению должны быть числовыми (ну например, число, или номер месяца), хранятся как char, или там unsigned char. Ну, я типы данных на дельфевые поменял - по размеру все сходится, строковые данные достаются - а вот что с этими числами делать - не ясно. Че только уже не пробовал - все муть какая-то!


Кинь изначальную структуру на Си и свою структуру на Делфи. Может где типы неправильные поставил.

6.9K
09 октября 2004 года
fightcat
17 / / 07.09.2004
Цитата:
Originally posted by Sagittarius

Кинь изначальную структуру на Си и свою структуру на Делфи. Может где типы неправильные поставил.




Сейчас пишу из другого места, так что точно кинуть не могу, но я все проверил раз десять.
Та прога была 16-ти битная
Короче типы я сопоставил так:

long - longint
char[10] - array [1..10] of char
unsigned int - word
int - smallint
char - shortint

Ну не в этом дело. Вот char - нормально достается. А вот что делать со всеми этими int'ами - че то не пойму - он такое достает, что мама не горюй!

6.9K
09 октября 2004 года
fightcat
17 / / 07.09.2004
Цитата:
Originally posted by Sagittarius

Кинь изначальную структуру на Си и свою структуру на Делфи. Может где типы неправильные поставил.



Да! Забыл сказать - я уже все типы данных, которые по размеру подходят, перепробовал. Вместо shortint можно и char ставить, и byte, да все что угодно. Ну и с остальными то же.
Тут дело не в этом... А вот в чем?

302
10 октября 2004 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by fightcat
Да! Забыл сказать - я уже все типы данных, которые по размеру подходят, перепробовал. Вместо shortint можно и char ставить, и byte, да все что угодно. Ну и с остальными то же.
Тут дело не в этом... А вот в чем?


Может дело в коде, который читает данные?

6.9K
10 октября 2004 года
fightcat
17 / / 07.09.2004
Цитата:
Originally posted by Sagittarius

Может дело в коде, который читает данные?



Ну, может быть. Хотя тут вроде все просто:

Есть структура, в которую я читаю:
type
TImpData = record
id:LongInt;
FIO:array [1..46] of char;
Year:Word;
Month:ShortInt;
Day:ShortInt;
;

Потом создаю переменные:
F: File of TImpData;
FS: TImpData;

Ну а потом читаю:
AssignFile(F, OpenFileDlg.FileName);
Reset(F);
Seek(F, Form1.scrlFileScrollBar.Position-1);
//Ну это он номер из скроллбара берет. Но
//если не менять - то 1
Read(F, FS);
//Ну и например
edtMonth.Text:= inttostr(fs.Month);

Вот с этими Word и ShortInt - ничего не получается :(



end;

302
10 октября 2004 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by fightcat
Вот с этими Word и ShortInt - ничего не получается


Хм... На мой взгляд, тоже все нормально.
Может я чего не досмотрел?

Если твои данные не секретные, кинь мне файл и описание структуры на Си на мыло. sagittarius_masu (че та там) hotbox (здесь точка) ru

6.9K
11 октября 2004 года
fightcat
17 / / 07.09.2004
Цитата:
Originally posted by Sagittarius

Хм... На мой взгляд, тоже все нормально.
Может я чего не досмотрел?

Если твои данные не секретные, кинь мне файл и описание структуры на Си на мыло. sagittarius_masu (че та там) hotbox (здесь точка) ru



Спасибо за предложение! Однако вариант этот оставим на крайний случай - хочется пока самому разобраться! :)
Вот, я вроде нашел проблему: эта зараза что-то странное делает со структурой.
Короче, происходит следующее:
Если написано, например:

type
FIO:array [1..47] of char;
end;
То sizeof даст 47 - это вполне логично

При
type
FIO:array [1..47] of char;
Year:shortint;
end;
sizeof даст 48 - это тоже логично

Но вот при
type
FIO:array [1..48] of char;
Year:Smallint;
end;

размер становится уже 50.

При этом получается, как бы, что расползается предыдущая переменная - я проверял это по тому как он читает байты, сверяясь с шестнадцатиричным редактором.

Что ж это он творит то????

6.9K
11 октября 2004 года
fightcat
17 / / 07.09.2004
Ура!
Оказалось, что чтобы он такой хренью не занимался, нужно ему доказать, что память нужно экономить с помощью слова packed.
Все стало на свои места!

Огромное спасибо за помощь!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог