число с плавающей точкой DEC из HEX

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

число с плавающей точкой DEC из HEX

Сообщение Бяка » 18.12.2008 (Чт) 19:34

подскажите
1. как получить DEC число с плавающей точкой из HEX числа длиной 4 байта.
:?:
Примеры: 1.0 = 0x3F800000, -2.0 = 0xC0000000,
123.456 = 0x42F6E979.

2. как получить DEC число с плавающей точкой из специального представления числа с плавающей точкой в двоично-десятичном коде длиной 4 байта. Старший байт кодирует в старшем бите знак, а в младших семи битах десятичную экспоненту, которая представлена в двоичном коде, причем нулевое значение порядка кодируется числом 0x40. Младшие 3 байта кодируют 6 двоично-десятичных цифр мантиссы.

Примеры: 1.0 = 0x40100000, -20.0 = 0xC12000000, 123.456 =0x42123456.

:shock: :shock:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: число с плавающей точкой DEC из HEX

Сообщение Хакер » 21.12.2008 (Вс) 21:44

1. Преобразовать hex-строчку в Long-число (встроенными возможностями VB), а потом этот Long скастовать к Single с помощью альтернативно-объявленной VarPtr-функции.

2. Плохо понял.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: число с плавающей точкой DEC из HEX

Сообщение tyomitch » 21.12.2008 (Вс) 21:51

Хакер писал(а):2. Плохо понял.

У него как Single, только экспонента на бит короче и мантисса на бит длиннее.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: число с плавающей точкой DEC из HEX

Сообщение tyomitch » 21.12.2008 (Вс) 22:44

tyomitch писал(а):
Хакер писал(а):2. Плохо понял.

У него как Single, только экспонента на бит короче и мантисса на бит длиннее.

Нет, соврал, у него двоично-десятичные цифры :shock:

Тогда только разбивать на куски и вычислять.


Код: Выделить всё
Option Explicit

Private Type f
    i As Integer
    b2 As Byte
    b1 As Byte
End Type
Private Type s
    s As Single
End Type
Private Type l
    l As Long
End Type

Sub Main()
Dim f As f, l As l, s As s, sg As Boolean
l.l = &H42123456
LSet f = l
s.s = s.s + (f.b2 \ 16) * 0.1
s.s = s.s + (f.b2 And 15) * 0.01
s.s = s.s + (f.i \ 4096) * 0.001
s.s = s.s + ((f.i \ 256) And 15) * 0.0001
s.s = s.s + ((f.i \ 16) And 15) * 0.00001
s.s = s.s + (f.i And 15) * 0.000001
s.s = s.s * 10 ^ ((f.b1 And &H7F) - &H3F)
If (f.b1 And &H80) Then s.s = -s.s
MsgBox s.s
l.l = &H42F6E979
LSet s = l
MsgBox s.s
End Sub
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 1

    TopList  
cron