VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 数学・算法・基本コード関係のメニュー
1.人に聞けないこんな事(主要プロパティについて)
2.条件判断・条件分け処理関係
3.繰り返し処理関係
4.プログラムの最適化(高速化)について
5.ちょっと便利な小技集
6.10進←→16進相互変換
7.ソート法色々
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


6.16進数から10進数に変換及び10進数から16進数に変換
1.16進数→10進数に変換
2.10進数→16進数に変換
3.サンプル投稿用掲示板に記載の同様のサンプルの紹介
4.
5.
6.
7.
8.
9.

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:追加なし
使用 API:
なし
その他 :
    :
このページのトップへ移動します。 1.16進数→10進数に変換(SampleNo=271  2003.03.25)

Private Sub Command1_Click()
  Text2.Text = f16sinTo10sin(Text1.Text)
End Sub

Private Function f16sinTo10sin(ByVal str16sin As String) As String
  Dim i As Long, N As Long, dbl10Sin As Double
  Const Table As String = "0123456789ABCDEF"
  '前後の空白を取り除き大文字に変換
  str16sin = Trim$(UCase(str16sin))
  '対象文字列のチェック
  If Len(str16sin) = 0 Or Len(str16sin) > 8 Then Exit Function
  For i = 1 To Len(str16sin)
    '文字が0〜Fの範囲内かチェック
    If Mid$(str16sin, i, 1) < Chr$(48) Or Mid$(str16sin, i, 1) > Chr$(70) Then
      Exit Function
    End If
  Next i
  '1文字づつ10進数に変換
  For i = 1 To Len(str16sin)
    '10進数のいくつになるか調べる
    N = (InStr(Table, Mid$(str16sin, i, 1)) - 1)
    '桁上がり分の計算と小計を求める
    dbl10Sin = dbl10Sin * 16 + N
  Next i
  f16sinTo10sin = CStr(dbl10Sin)
End Function

'整数の範囲内ならCLng関数で変換
'  If "&H" & str16sin <= "&H7FFFFFFF" Then
'    f16sinTo10sin = CLng("&H" & str16sin)
'    Exit Function
'  End If
'16進数は、16進んで、1つ桁が上がります。したがって、16進数の文字が
'10進数のいくつになるかを求めて、桁上がり分は、16倍すれば10進数になります
'たとえば、7B は B は、10進数の 11 になります。7 は、2桁目なので 7 * 16 = 112 になります
'112 + 11 = 123 になります。同様に FF なら 15 + 240 = 255 になります
'整数(2147483647 / 7FFFFFFF)の範囲内なら CLng関数で10進数に簡単に変換できます。

このページのトップへ移動します。 2.10進数→16進数に変換(SampleNo.271  2003.03.25)

Private Sub Command2_Click()
  Text2.Text = f10sinTo16sin(Text1.Text)
End Sub

Private Function f10sinTo16sin(ByVal str10sin As String) As String
  Dim i    As Long, j      As Long, k As Integer
  Dim RetValue As Variant, ModValue As Variant
  Dim strSum  As String, Keta(8)  As Double
  Const Table As String = "0123456789ABCDEF"
  str10sin = Trim$(str10sin)   '空白を取り除く
  For i = 1 To Len(str10sin)   '0〜9の範囲内にあるかチェック
    If Mid$(str10sin, i, 1) < Chr$(48) Or Mid$(str10sin, i, 1) > Chr$(57) Then
      Exit Function
    End If
  Next i
  RetValue = CDec(str10sin)
  '16進数の範囲内かチェック
  If RetValue < 0 Or RetValue > 4294967295# Then Exit Function
  Keta(0) = 1: i = 0
  Do
    i = i + 1: k = i  'RetValue の16進数の桁数を求める
    Keta(i) = Keta(i - 1) * 16
  Loop Until Keta(i) > RetValue
  For i = 1 To k
    ModValue = Keta(k - i)
    '商を求めてその値が16進数の何になるかを求める
    strSum = strSum & Mid$(Table, Int(RetValue / ModValue) + 1, 1)
    '余りを求めて16より大きい場合は再度計算
    RetValue = RetValue - Int(RetValue / ModValue) * ModValue
  Next i
  f10sinTo16sin = strSum
End Function

'整数の範囲内ならHex関数で変換
'  If RetValue < 2147483647 Then
'    f10sinTo16sin = Hex(RetValue)
'    Exit Function
'  End If

'16進数は、16進んで1つ桁が上がります。したがって、16進数の最下位は
'数値を16で割った余り、その次の位はその商をさらに16で割ったときの余り
'という関係になります。
'つまり、ある値をどんどんと16で割り、でてきた余りを最下位から順に
'つなげていけば、16進数になります。

'たとえば123は、16で割ると7 余り11 なので、最下位はBです。
'次に商の7は16で割ると、0 余り7 なので、次の位は7です。
'このようにして、7Bという16進数が得られます。
'上記の場合は逆に上の位から計算しております。
'1234 は3桁になりModValue=256 になり1234を256で割ると4と余りが210になり
'4が求まり210をModValue=16で割ると13と余りが2になりDと2が求まる
'("4" & "D" & "2" = "4D2")
'整数(2147483647 / 7FFFFFFF)の範囲内なら Hex関数で16進数に簡単に変換できます。


'10進数   0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15
'16進数   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
' 2進数 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

上記実行図及び使用コントロールと配置図
 algorithm07_01

このページのトップへ移動します。 3.サンプル投稿用掲示板に記載の同様のサンプルの紹介

1.2進、10進、16進...の基数変換(VB6.0) 投稿者:ささ 投稿日:2005/08/04(Thu)

2.16進数を10進数へ変換する方法 投稿者名:Lantern さん 投稿日:2003/03/19(Wed)

このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 7.


このページのトップへ移動します。 8.


このページのトップへ移動します。 9.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
16進数→10進数に変換 10進数→16進数に変換 10進数、16進数相互変換 2進、10進、16進...の基数変換 16進数を10進数へ変換する方法
基数変換とは、ある進数で示された数値を、別の進数における数値へ変換することです。



このページのトップへ移動します。