Dim arr() as Byte
Dim x As Double
x=123.567
Redim arr(0 to len(x)-1)
CopyMemory arr(0), x, len(x)-1
В принципе, код Antonariy (если заменить декларации на Variant, а присвоение на CDec) вполне можно использовать. Но возможно в CopyMemory надо еще и смещение указывать от VarPtr.
Хакер писал(а):Как будет в 16-ричной форме выглядить число 147,13?
Неужели ты этого не знаешь?
Sub test()
Dim n As Variant, arr() As Byte
ReDim arr(0 To 11)
n = CDec("79228162514264337593543950334")
Debug.Print n
CopyMemory arr(0), ByVal VarPtr(n) + 4, 12
For i = 0 To 11
Debug.Print IIf(Len(Hex(arr(i))) = 1, "0", "") & Hex(arr(i)) & " ";
Next i
Debug.Print
Debug.Print
End Sub
Function HexFromDec(ByVal DecimalVariant As Variant) As String
Dim buffer(0 To 2) As Long
GetMem8 VarPtr(DecimalVariant) + 4, VarPtr(buffer(0))
GetMem4 VarPtr(DecimalVariant) + 12, VarPtr(buffer(2))
HexFromDec = Right$("00000000" + Hex$(buffer(0)), 8) + Right$("00000000" + Hex$(buffer(2)), 8) + Right$("00000000" + Hex$(buffer(1)), 8)
End Function
Public Sub test()
Debug.Print " 1 = "; HexFromDec(CDec("1"))
Debug.Print " 222 = "; HexFromDec(CDec("222"))
Debug.Print " 44444444 = "; HexFromDec(CDec("44444444"))
Debug.Print " 55555555555 = "; HexFromDec(CDec("55555555555"))
Debug.Print " 66666666666666 = "; HexFromDec(CDec("66666666666666"))
Debug.Print " 7777777777777777777 = "; HexFromDec(CDec("7777777777777777777"))
Debug.Print "888888888888888888888888 = "; HexFromDec(CDec("888888888888888888888888"))
End Sub
1 = 000000000000000000000001
222 = 0000000000000000000000DE
44444444 = 000000000000000002A62B1C
55555555555 = 000000000000000CEF5E80E3
66666666666666 = 0000000000003CA20AFC2AAA
7777777777777777777 = 000000006BF037AE325F1C71
888888888888888888888888 = 0000BC3AC3627D4500E38E38
Хакер писал(а):Я знаю ещё десяток способов представить дробные числа ввиде хекса.
Сейчас этот форум просматривают: Google-бот и гости: 21