Function STR2toHEX16(str2 As String) As String
Dim strHEX As String
Dim n As Integer 'ループカウンタ
Dim i As Integer 'ループのカウンタ
Dim n8421 As Integer '8 4 2 1の数値計算用
Dim nBYTE As Integer
strHEX = "" '結果のエリアを初期化する
'文字数分ループする
For n = 1 To Len(str2) Step 4 '4文字(1バイト)単位にループを作る
n8421 = 8 '初期値に8を代入する(上から計算したいので)
nBYTE = 0 '1バイト計算用変数を初期化
For i = 0 To 3 '4回まわるよ(4ビット分)
'ビットが立っているかチェックする
If Mid(str2, n + i, 1) = "1" Then
nBYTE = nBYTE + n8421 'ビットに対応した数値を+する
End If
'次のビットを計算したいので2で割る
n8421 = n8421 / 2
Next i
'計算して、1倍との数値が完成したので16進文字にしてセットする
strHEX = strHEX & Hex(nBYTE)
Next n
'リターン値をセットして関数を抜ける
STR2toHEX16 = strHEX
End Function
Function STR2toHEX16_B(ByVal str2 As String) As String
Dim strHEX As String
Dim n As Integer 'ループカウンタ
Dim i As Integer 'ループのカウンタ
Dim n8421 As Long '8 4 2 1の数値計算用
Dim nBYTE As Long
strHEX = "" '結果のエリアを初期化する
n8421 = 1 '初期値に1を代入する(下から計算したいので)
nBYTE = 0 '計算用変数を初期化
'文字数分ループする
For n = Len(str2) To 1 Step -1 '後ろからループを作る
'ビットが立っているかチェックする
If Mid(str2, n + i, 1) = "1" Then
nBYTE = nBYTE + n8421 'ビットに対応した数値を+する
End If
'次のビットを計算したいので*2で計算
n8421 = n8421 * 2
Next n
'計算して、数値が完成したので16進文字にしてセットする
strHEX = Hex(nBYTE)
'リターン値をセットして関数を抜ける
STR2toHEX16_B = strHEX
End Function
文字列を後ろから見るために、逆順のループを作ってみました。
For n = Len(str2) To 1 Step -1 '後ろからループを作る
で、次のポイントが、
'次のビットを計算したいので*2で計算
n8421 = n8421 * 2
2進数は*2で次の位が求められるので、単純にカケテ次の位を計算してます。
If Mid(str2, n + i, 1) = "1" Then
nBYTE = nBYTE + n8421 'ビットに対応した数値を+する
End If
あとは、ビットが立っていたら+しているだけです。
最後はHEX関数で、変換しただけです。
こんな感じで、プログラムを一から見直して、作成してみました。
2進数文字列を受け取りHEX16進文字列を返す(後ろから変換)
http://www.ken3.org/cgi-bin/test/test094-3.asp?DATA=111010
で、テストできます。(6桁の11 1010を変換すると3Aとなるはず?)