Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Есть 4 байта с вещественным числом. Как его получить в Singl

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
BNN



Зарегистрирован: 22.03.2007
Сообщения: 2

СообщениеДобавлено: Чт Мар 22 2007 07:27    Заголовок сообщения: Есть 4 байта с вещественным числом. Как его получить в Singl Ответить с цитатой

Имеется последовательность из 4 байт (например 3F 8F BE 76). В этих 4 байтах находится вещественное число, как оно лежит в памяти компьютера, т.е. в виде Z E M , где Z-знак числа 1 бит , E - порядок числа 8 бит , M - мантисса 23 бита . Как их положить в память и получить оттуда вещественное число Single (для примера - 1.123). Программа на VB.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Чт Мар 22 2007 10:20    Заголовок сообщения: Ответить с цитатой

Формат вещественных чисел может отличаться в различных системах. Так же нельзя забывать, что в различных системах используется различный порядок байтов. В некоторых ЯП существуют стандартные функции преобразования массива байтов в действительное число. В Java возможно преобразовать массив байтов в действительное число, используя унифицированный формат.

Насчет VB сказать не могу. Судя по тому что Вы его используете, скорее всего, число ваше хранится в формате IEEE 754. Можно попытаться распарсить самому, но я бы рекомендовал найти стандартную функцию.
_________________
Самоловских Виталий aka Kefir
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BNN



Зарегистрирован: 22.03.2007
Сообщения: 2

СообщениеДобавлено: Чт Мар 22 2007 12:38    Заголовок сообщения: Re: Есть 4 байта с вещественным числом. Как его получить в S Ответить с цитатой

BNN писал(а):
Имеется последовательность из 4 байт (например 3F 8F BE 76). В этих 4 байтах находится вещественное число, как оно лежит в памяти компьютера, т.е. в виде Z E M , где Z-знак числа 1 бит , E - порядок числа 8 бит , M - мантисса 23 бита . Как их положить в память и получить оттуда вещественное число Single (для примера - 1.123). Программа на VB.



Вот что получилось:
Код:

Function Reality(str As String) As String 'str-строка в 16виде 4 байта например 3F8FBE76
Dim ByteFloat(3) As Byte, valFloat As Single
ByteFloat(3) = dec(Left(str, 2)) 'функция dec преобразует из 16-ой строки в байт, побайтно
ByteFloat(2) = dec(Mid(str, 3, 2)) 'ложим в массив из 4 байт, преворачиваем младшее и старшее слово
ByteFloat(1) = dec(Mid(str, 5, 2))
ByteFloat(0) = dec(Mid(str, 7, 2))

CopyMemory valFloat, ByteFloat(0), 4 'копируем в байты в память

Reality = CStr(valFloat) 'и берем оотуда флоатом
End Function


Ну и copymemory должна быть задекларирована:
Код:

Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)


Всем спасибо.[/code]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...