# Coverting String Format to BCD representation in little endian format

Hi,
I am new to programming and I need some help here. I need to translate the PIN number entered by the user into data for an API call. I need to convert the input string into 4-byte BCD representation, in little-endian format (for example, 0x12345678 in binary is passed to the library as 0x78654312) before passing the PIN to a library function.

Your help is very much appreciated.

Joe
###### Who is Participating?

Commented:
Here it is again cleaned up slightly with test harness code ready to drop into a standard form to test.

Option Explicit

Function Pin2BCD(pin As String) As Long
Dim i As Long
Dim s As String
Dim l As Long

For i = 7 To 1 Step -2
s = s & Mid\$(pin, i, 2)
Next

For i = 1 To Len(s)
On Error GoTo Overflow
l = l * &H10& Or (CLng(Mid\$(s, i, 1)) And &HF&)
Next

Pin2BCD = l
Exit Function

Overflow:
'Not it all
l = (Not ((Not l) And &HFFFFFFF)) * &H10 Or (CLng(Mid\$(s, i, 1)) And &HF&)
Resume Next
End Function

Dim x
x = Pin2BCD("99999999")
MsgBox x & vbCrLf & Hex\$(x)

x = Pin2BCD("12345678")
MsgBox x & vbCrLf & Hex\$(x)

x = Pin2BCD("87654321")
MsgBox x & vbCrLf & Hex\$(x)

x = Pin2BCD("00000000")
MsgBox x & vbCrLf & Hex\$(x)
End Sub
0

Commented:
Try this function - I think I remember what BCD looks like. Oh for a proper unsigned integer.

Function Pin2BCD(pin As String) As Long
Dim i As Long
Dim s As String
Dim l As Long

For i = 7 To 1 Step -2
s = s & Mid\$(pin, i, 2)
Next

For i = 1 To Len(s)
On Error GoTo Overflow
l = l * &H10& Or (CLng(Mid\$(s, i, 1)) And &HF&)
Next

Pin2BCD = l And &HFFFFFFFF
Exit Function

Overflow:
'Not it all
l = (Not ((Not l) And &HFFFFFFF)) * &H10
l = l Or (CLng(Mid\$(s, i, 1)) And &HF&)
Resume Next
End Function
0

Commented:
Grade B? You're a hard marker ;-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.