Конвертация double в ansi-строку и обратно средствами WinAPI

Тема в разделе "LANGS.C", создана пользователем Rel, 13 ноя 2011.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    в ближайшее время не будет доступа к винде, но писать код нужно... подскажите, есть ли в стандартных библиотеках винды функции для конвертации double в однобайтную строку и обратно... под стандартными понимаются библиотеки, которые есть на всех версиях вплоть до вин2000... то есть никаких там "рантаймов", во всяких библиотеках типа ntdll.dll, kernel32.dll, user32.dll, shell32.dll, msvcrt.dll и тд... желательно канеш, чтобы та же (с тем же именем и параметрами) функция была в glibc под линуксами (типа dtoa/strtod), но это не принципиально... заранее спасибо!

    ЗЫ наверное, надо было лучше запостить эту тему в разделе Win32... извиняйте...
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    выкачал mingw-w64 рантайм... хотел посмотреть символы, которые предоставляют всякие libntdll.a и тд... однако ни nm, ни objdump не могут прочитать символы:
    что бы это значало?))
     
  3. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    http://www.geoffchappell.com/viewer.htm?doc=studies/windows/win32/ntdll/api/index.htm
     
  4. sender0

    sender0 New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2011
    Сообщения:
    25
    sscanf/sprintf?
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    std::stringstream
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    клевая ссылка, но полазив по сайту я так и не нашел фугкции конвертации к double и обратно...

    вообще, я где то слышал, что у sprintf/sscanf из msvcrt.dll есть проблема с выводом double, поэтому во всех CRT есть надстройка, убирающая этот недостаток... может я ошибаюсь канеш... вот например фрагмент из документации WCRT, касательно функции _wvsprintf:
    противоречит условию задачи...

    ЗЫ нашел список импортов msvcrt.dll, там обнаружил strtod и atof... еще нашел там _ecvt и _fcvt, посмотрю корректны ли они, сравню со sscanf/sprintf... если у кого есть инфа по этому поводу, то высказавайтесь...
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Kernel32.dll

    MultiByteToWideChar
    WideCharToMultiByte

    minimum: Win2000 pro

    кодовая страница+строка <-> utf-16 строка

    разве не то, что нужно?
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    нет... не то, что нужно... внимательней читаем тему... при чем тут utf16 <-> ansi вообще?
     
  9. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    ну через две функции
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    извини, чет я не понял последнего коментария))
     
  11. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    sprintf, sscanf
     
  12. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Rel
    В чистом WinAPI такой функции похоже нет.
    Мне пришлось писать свою.
    В принципе не так сложно.
    Для double в строку: wsprintf().
    А из строки в double - пиши свой код.
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rel
    sscanf и sprintf в ntdll есть. Я думаю, sergegers это с самого начала имел в виду.
    А насчёт библиотек типа libntdll.a и объектников, можно попробовать PEView. По крайней мере libntdll.a из mingw32 открывается нормально.
     
  14. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Rel
    Вероятно дело в опциях ./configure которые были использованы при сборке binutils, откуда родом nm и objdump вместе с libbfd.