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
pogtAsked:
Who is Participating?
 
fds_fatboyConnect With a Mentor 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

Private Sub Form_Load()
    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
 
fds_fatboyCommented:
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
 
fds_fatboyCommented:
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.

All Courses

From novice to tech pro — start learning today.