Solved

Coverting String Format to BCD representation in little endian format

Posted on 2004-09-24
3
572 Views
Last Modified: 2013-12-26
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
0
Comment
Question by:pogt
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
3 Comments
 
LVL 10

Expert Comment

by:fds_fatboy
ID: 12141848
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
 
LVL 10

Accepted Solution

by:
fds_fatboy earned 250 total points
ID: 12141898
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
 
LVL 10

Expert Comment

by:fds_fatboy
ID: 12149685
Grade B? You're a hard marker ;-)
0

Featured Post

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question