Search code examples
vb6

Convert Double into 8-bytes array


I want to convert a Double variable into an 8-bytes array, this is what I've come with so far:

Dim b(0 To 7) As Byte
Dim i As Integer

dim d as double
d = 1            ' for simplicity, I sit the variable "d" to 1

For i = 0 To 7
    Call CopyMemory(b(i), ByVal VarPtr(d) + i, 1)
Next i

' b => [0, 0, 0, 0, 0, 0, 240, 63]

What I'm doing wrong?


Solution

  • Don't use a loop, use the length argument:

    Option Explicit
    
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
        ByRef Destination As Any, _
        ByRef Source As Any, _
        ByVal Length As Long)
    
    Sub DblToByte(ByVal D As Double)
        Dim Bytes(LenB(D) - 1) As Byte
        Dim I As Integer
        Dim S As String
    
        CopyMemory Bytes(0), D, LenB(D)
    
        For I = 0 To UBound(Bytes)
            S = S & CStr(Bytes(I)) & " "
        Next
        MsgBox S
    End Sub
    
    Private Sub Form_Load()
        DblToByte 1
        Unload Me
    End Sub