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 If n = 0 Then CBin = 0 ElseIf n > 0 Then Dim i As Double Dim c As Long i = 2 ^ CLng(Log(n) / Log(2) + 0.1) Do While i >= 1 c = Fix(n / i) CBin = CBin & c n = n - i * c i = i / 2 Loop End If End Function 'converts an integer to binary string, problems for n=64 Function CBinOld(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 CBinOld = CBinOld & 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
Leave a Reply