1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Проблема со чтением числа с плавающей точко

Тема в разделе "MAXScript", создана пользователем Фигли, 4 янв 2013.

Модераторы: Savin Denis
  1. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Пример из хелпа:
    f=fopen "c:\\test.bin" "wb"
    WriteFloat f 0.9905395508 -- Пишется в файл 00947D3F
    fclose f
    f=fopen "c:\\test.bin" "rb"
    ReadFloat f -- Читается из файла 0.99054
    fclose f
    Тут проблем нет, как число записалось в бинарный файл, так и прочиталось. Проблема в том, что у меня есть бинарные файлы, но сами числа записаны наоборот, число из примера в самом файле записано так - 3F7D9400
    В калькуляторе Хекс редактора есть выбор как переводить число Intel или Motorolla. Если переводить как Motorolla, число переводится 0.9905395508, если выбрать Intel то получается 1.363658326e-038, а Мах переводит именно как Intel. Чтоб правильно читалось, мне пришлось создавать временный файл, писать в него каждое 16-тиричное число побайтно наоборот (1234->4321), чтоб из него правильно прочитать командой ReadFloat.
    Работать то оно работает, читает, переводит, но это как-то не спортивно, хочу избавиться от временного файла.
    Так же пробовал через массив.
    tmp1 = (bit.intAsHex (ReadLong fs)) as string -- читаю из файла число перевожу в Хекс и сохраняю как строку
    tmp2 = tmp1[7]+tmp1[8]+tmp1[5]+tmp1[6]+tmp1[3]+tmp1[4]+tmp1[1]+tmp1[2] -- "выворачиваю" число
    Но тут проблема, нет команды для перевода Хекс числа в число с плавающей точкой, есть такие:
    bit.HexAsInt
    bit.IntAsHex
    А Hex как Float не существует. И снова я возвращаюсь к временному файлу...
    Есть ли в Мах, команда, как в Хекс калькуляторе, переключить перевод чисел с Intel на Motorolla, чтоб без временного файла правильно читать? Или какой-то другой выход.

    Обновление сообщения автором
    04.01.2013 в 18:51
    В догонку, вот часть бинарного файла.
    3F7D981ABDB2DD5BBDCF3CAB3CED79FE
    Тут 4 числа с плавающей точкой, если его читать ReadFloat получается не то, а надо чтоб на выходе было:
    0.990602
    -0.0873363
    -0.10119
    0.0289888
    И это я получаю, только через временный файл.
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Такой вариант не подходит?
    Код:
    bit.intAsFloat (bit.HexAsInt tmp2)
     
  3. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Вобщето это не просто подходит, это решение. :))
    Я несколько в шоке, что сам не нашёл. Числа всё же надо переписывать в обратном порядке, но это через массив, главное без временного файла.
    Спасибо. (тыкнул в кнопку)
    Но для общего развития, вопрос всё же в силе:
    Есть ли в Мах, команда, как в Хекс калькуляторе, переключить перевод чисел с Intel на Motorolla
     
Модераторы: Savin Denis

Поделиться этой страницей