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

テクてく 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 件のコメント: