当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2009年7月23日木曜日

16進数を10進数に変換する関数を自作してみた

x進数を10進数に変換する関数で16進数を10進数に変換する関数があることを紹介した。

しかし、ないものだと思っていたので、自作してみた。
さらにせっかくなので、関数化してみた。
もっと綺麗に書けるかもしれないが、やっつけだったので勘弁して欲しい(汗)。

Function HexToDec( HexStr As String, DecLong As Long ) As Boolean
    '--------------------------------------------
    ' 【16進数から10進数へ変換する関数】
    '
    ' 引数: HexStr 16進文字[Input]
    ' DecLong 10進数[Output]
    ' 戻り値: True 成功
    ' False 失敗
    ' 作成者: 御代 政彦
    ' 作成日: 2009/07/22
    ' バージョン: 1.0
    '--------------------------------------------
    On Error Goto ErrProc
    
    Dim HexLen As Integer '16進数の桁数
    Dim HexInt As Integer '16進数の各桁を数値にしたもの
    Dim i As Integer 'カウンタ
    
    '16進数の桁数を取得する
    HexLen = Len( HexStr )
    
    '16進数の桁数分ループする
    For i = 1 To HexLen
        '各桁を数値に変換する
        HexInt = Fto15( Mid( HexStr, HexLen + 1 - i, 1 ) )
        If HexInt = -1 Then
            HexToDec = False
            Exit Function
        End If
        '桁数に16のべき乗を書けたものを累積していく
        DecLong = DecLong + HexInt * ( 16 ^ ( i - 1 ) )
    Next
    HexToDec = True
    Exit Function
    
ErrProc:
    HexToDec = False
    Exit Function
End Function

Function Fto15( HexStr As String ) As Integer
    Fto15 = -1
    If HexStr = "0" Then
        Fto15 = 0
    End If
    If HexStr = "1" Then
        Fto15 = 1
    End If
    If HexStr = "2" Then
        Fto15 = 2
    End If
    If HexStr = "3" Then
        Fto15 = 3
    End If
    If HexStr = "4" Then
        Fto15 = 4
    End If
    If HexStr = "5" Then
        Fto15 = 5
    End If
    If HexStr = "6" Then
        Fto15 = 6
    End If
    If HexStr = "7" Then
        Fto15 = 7
    End If
    If HexStr = "8" Then
        Fto15 = 8
    End If
    If HexStr = "9" Then
        Fto15 = 9
    End If
    If HexStr = "a" Then
        Fto15 = 10
    End If
    If HexStr = "a" Then
        Fto15 = 10
    End If
    If HexStr = "b" Then
        Fto15 = 11
    End If
    If HexStr = "c" Then
        Fto15 = 12
    End If
    If HexStr = "d" Then
        Fto15 = 13
    End If
    If HexStr = "e" Then
        Fto15 = 14
    End If
    If HexStr = "f" Then
        Fto15 = 15
    End If
End Function



また、この関数を利用したサンプルコードを載せるので、どのように使うのかを確認して欲しい。

Sub Click(Source As Button)
    Dim inp As String '16進文字列
    Dim ret As Long '10進数
    Const MSGTITLE = "16進数から10進数への変換"
    
    inp = Inputbox( "8桁以内の、「0-F」でできた文字列を入力してください。", MSGTITLE, "0" )
    ret = 0
    
    '入力チェック
    If inp = "" Then
        Msgbox _
        "キャンセルされたので、処理を中止します。", _
        MB_OK + MB_ICONEXCLAMATION, MSGTITLE
        Exit Sub
    End If
    
    If HexToDec( inp, ret ) Then
        Msgbox _
        "16進数: " & Chr$(9) & inp & Chr$(10) & _
        "10進数: " & Chr$(9) & Format( Cstr(ret), "#,###" ), _
        MB_OK + MB_ICONINFORMATION, MSGTITLE
    Else
        Msgbox _
        "変換に失敗しました。", _
        MB_OK + MB_ICONSTOP, MSGTITLE
    End If
End Sub





【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: