Структура заполняется из файла, проблема в следующем на Борладн С все работает замечательно и число типа double выводжится корректно (Борладн С под ДОС), при компимяции этого же кода GCC под Sun Solaris выводится вместо числа типа double белиберда.....
а теперь внимание вопрос: чде чего надо поковырять, или как изменить код чтобы это работало под Sun Solaris?
DateTime = (double *)Var1->DateTime;
Структура заполняется из файла,
а теперь внимание вопрос: чде чего надо поковырять, или как изменить код чтобы это работало под Sun Solaris?
проблема в том, что формат double не везде одинаковый, и даже его размер может быть не 8, а 6 или 10. Я бы перевёл число в текстовый формат(fprintf(out_file, "%g", Var)), а потом считал это число из файла. Текстовый формат везде одинаковый.
ЗЫЖ точно не помню, как задаются числа double в printf, посмотри документацию к своему компилятору, может не %g, а %f будет лучше.
DateTime = (double *)Var1->DateTime;
Структура заполняется из файла,
а теперь внимание вопрос: чде чего надо поковырять, или как изменить код чтобы это работало под Sun Solaris?
проблема в том, что формат double не везде одинаковый, и даже его размер может быть не 8, а 6 или 10. Я бы перевёл число в текстовый формат(fprintf(out_file, "%g", Var)), а потом считал это число из файла. Текстовый формат везде одинаковый.
ЗЫЖ точно не помню, как задаются числа double в printf, посмотри документацию к своему компилятору, может не %g, а %f будет лучше.
Проблема в том что этот double (Дата и время в формате TDateTime Delphi) читается из бинарного файла (формат которого изменить низя ) 8 байт, а затем мне нужно его вывести в текстовый файл но уже в нормальном строковом виде.....
Проблема в том что этот double (Дата и время в формате TDateTime Delphi) читается из бинарного файла (формат которого изменить низя ) 8 байт, а затем мне нужно его вывести в текстовый файл но уже в нормальном строковом виде.....
Солярис-т о на чем стоит, е-мое? На спарке? Если да - на них BE порядок байт вроде был... А как там представлены FP числа надо доки бы поглядеть, но допустим также. (Но я бы на это не рассчитывал...) Тогда надо эти восемь байт пересвопить в обратном порядке, и уже их прочитать как дабл.
Если Солярис на x86 стоит - то не понял, откуда проблема.
А то можно записать в пустой файл дабл на одной платформе и на другой, и вывести почарово значения и сравнить. Это если доки читать лень.
Проблема в том что этот double (Дата и время в формате TDateTime Delphi) читается из бинарного файла (формат которого изменить низя )
Тогда тебе придётся самому разобраться в формате TDateTime Delphi и написать конвертор этого формата. Я думаю, что формат там обычный: число секунд от 01.01.1970 в том виде, как его понимает сопроцессор 8087, вобщем-то там ничего сложного и выходящего за пределы школьной программы нет, вроде шесть байтов мантиссы и пару байт порядка(m*2^p). Можно сделать конвертор на том-же TurboC(или даже на gcc под x86) и преобразовать эту дату в формат 64х битового целого без знака. Зато в следующий раз не будешь сувать в файл числа в таких форматах
Солярис-т о на чем стоит, е-мое? На спарке? Если да - на них BE порядок байт вроде был... А как там представлены FP числа надо доки бы поглядеть, но допустим также. (Но я бы на это не рассчитывал...) Тогда надо эти восемь байт пересвопить в обратном порядке, и уже их прочитать как дабл.
Ага на спарке....
такс... пересвопить это т.е. 1 байт станет 8-м, 2-ой станет 7-м и т.д. правильно я понял?
Ура!!!!!!!! заработало! Спасибо за совет про пересвопливание
Зато в следующий раз не будешь сувать в файл числа в таких форматах
Эхххх.... ято не я в этот файл сую числа в таких форматах...
Насколько я помню, для быстрого перевода не очень большого целого числа существует грязный хак: надо умножить это число на какое-то MAGIC_CONST(ессно непомню какое) и взять часть байтов. Курить доки к "программированию сопроцессора i8087 на ассемблере".
Ура!!!!!!!! заработало! Спасибо за совет про пересвопливание
Эхххх.... ято не я в этот файл сую числа в таких форматах...
Бойтесь, чтоб там каких-нибудь тонких различий в представлении даблов на двух платформах не оказалось... а то сотворите еще одну проблему Y2K.
Но ваще конешно хороший вопрос, кто ж это догадался хранить датувремя в виде даблов...