2015년 11월 23일 월요일

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


10진수를 16진수로 바꾸는 기능이 있으면, 16진수를 10진수로 바꾸는 기능도 있어야지.


 폼은 뭐 간단히 디자인하고.



Private Sub Command1_Click()
        
    Text2.Text = Hex2Dec(Text1.Text)

End Sub

Public Function Hex2Dec(HexNum As String) As Double
    Dim DecNum As Double
    Dim getHex As String
    
    getHex = "0123456789ABCDEF"
    
    For i = 1 To Len(HexNum)
        If InStr(getHex, Mid$(HexNum, i, 1)) > 0 Then
            DecNum = (DecNum * 16) + InStr(getHex, Mid$(HexNum, i, 1)) - 1
        Else
            MsgBox ("16진수 값이 아닙니다.")
        End If
    Next i
    
    Hex2Dec = DecNum
End Function

소스는 심플... 하지만 조금 이해하기 난해하긴 함.
가장 쉬운 방법은 그냥 문자열을 하나씩 잘라서 ...

if getChar = "A" then
    DecNum = (DecNum * 16) + 10
else if getChar = "B" then
    DecNum = (DecNum * 16) + 11
    .
    .
    .
end if


이런 식으로 비교해서 값을 계산하면 됨.
이걸 If 문 대신, 순서대로 나열된 비교 문자열을 가지고 inStr() 함수를 이용해 ABCD... 값을 변환 한것 일뿐, 다를 것은 없음. ("A" 는 비교 문자열의 11번째에 위치함.)

요렇게 하고, 값 변환 테스트.


일단 간단히 "A" 를 변환해봄. 10으로 잘 나옴.


당연히 큰 값도 잘 나옴.