Here are functions to perform decimal to/from binary conversion.
- CBin – converts a decimal integer to binary string.
- CDeci – converts a binary string to decimal integer.
- CBinS16 – converts a decimal signed integer to 16 bit binary string.
- CdecS16 – converts a 16 bit binary string to decimal signed integer.
'converts an integer to binary string
Function CBin(ByVal n As Double) As String
On Error Resume Next 'caters for 0 values
Dim i As Double
i = 2 ^ Int(Log(n) / Log(2))
Do While i >= 1
CBin = CBin & Fix(n / i)
n = n - i * Fix(n / i)
i = i / 2
Loop
End Function
'converts a binary string to integer
Function CDeci(ByRef s As String) As Double
Dim i As Long
CDeci = 0
For i = 0 To Len(s) - 1
CDeci = CDeci + (Mid$(s, Len(s) - i, 1) * 2 ^ i)
Next i
End Function
'converts an integer to 16 bit signed binary string
Function CBinS16(ByVal n As Double) As String
Dim i As Double
CBinS16 = vbNullString
If n < -2 ^ 15 Then
CBinS16 = "0"
n = n + 2 ^ 16
i = 2 ^ 14
ElseIf n < 0 Then
CBinS16 = "1"
n = n + 2 ^ 15
i = 2 ^ 14
Else 'not negative
i = 2 ^ 15
End If
Do While i >= 1
CBinS16 = CBinS16 & Fix(n / i)
n = n - i * Fix(n / i)
i = i / 2
Loop
End Function
'converts 16 bit signed binary string to integer
Function CDecS16(ByRef s As String) As Double
Dim i As Long
CDecS16 = 0
For i = 0 To Len(s) - 1
CDecS16 = CDecS16 + (Mid$(s, Len(s) - i, 1) * 2 ^ i)
Next i
If CDecS16 >= 2 ^ 15 Then 'negative number
CDecS16 = CDecS16 - 2 ^ 16
End If
End Function