2015년 11월 23일 월요일

VB6 : 10진수를 16진수로 변환

시리얼 통신을 하다 보니 16진수 변환 기능이 필요하다.


폼을 대충 이렇게 만들고.


소스를 이렇게 ...
원리는 간단. 입력 받은 값을 그냥 16으로 나누기를 반복 하면서 나머지 값을 차곡 차곡 쌓아, 최종적으로 나눌값이 16 보다 작아질때 까지 반복하면 끝.

Private Sub Command1_Click()
    If IsNumeric(Text1.Text) Then
        Text2.Text = Dec2Hex(Val(Text1.Text))
    End If
End Sub

Public Function Dec2Hex(DecNum As Long) As String
    Dim hexv As String, na As Long
    hexv = ""
    
    Do While DecNum > 0
        na = DecNum Mod 16
        
        Select Case na
            Case 10
                hexv = "A" + Trim(hexv)
            Case 11
                hexv = "B" + Trim(hexv)
            Case 12
                hexv = "C" + Trim(hexv)
            Case 13
                hexv = "D" + Trim(hexv)
            Case 14
                hexv = "E" + Trim(hexv)
            Case 15
                hexv = "F" + Trim(hexv)
            Case Else
                hexv = Str(na) + Trim(hexv)
        End Select
    
        If DecNum >= 16 Then
            DecNum = Int(DecNum / 16)
        Else
            hexv = "0" + Trim(hexv)
            Exit Do
        End If
    Loop
    
    If Len(hexv) > 1 And (Len(hexv) Mod 2 = 1) Then
        Dec2Hex = Mid(hexv, 2)
    Else
        Dec2Hex = hexv
    End If
End Function


간단하게 테스트

10진수 "10" 이 16진수 "0A" 로 변환 되었다.


복잡한 숫자로 OK



계산기로 제대로 전환 되는가 확인해 보니, 잘 된다.