文字列←→16進法←→2進法の相互変換

文字列←→16進法←→2進法の相互変換

 文字列、16進法の相互変換、16進法と2進法の相互変換のサンプルコードとメモです。

ポイント

 ・変換に使用する関数( Mid / Hex / Asc / Val / Char )の使い方
 ・文字列を高速で連結する関数( Join / $ )の使い方
 ・連想配列(Collectionオブジェクト)


サンプルコード

基準文字列を次の順に変換。文字列→16進法→2進法→16進法→文字列

Private i As Long
Private varBinary As Variant
Private colHValue As New Collection '連想配列、Collectionオブジェクトの作成
Private lngNu() As Long
'-------------------------------------------------------------------------------------------------------

Sub Interconversion_Main() '文字列←→16進法←→2進法の相互変換
    Dim strData As String
    varBinary = Array("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", _
                    "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111")
    Set colHValue = New Collection '初期化
    For i = 0 To 15 '連想配列にvarBinaryの各値をキーとして、16進法「0~F」の値を格納
        colHValue.Add CStr(Hex$(i)), varBinary(i)
    Next
'**********************
'文字列→16進法→2進法
'**********************
    strData = "坂江 保"
    MsgBox strData, , "基準文字列"
    strData = StrToHex(strData)
    MsgBox strData, , "文字列→16進法"
    strData = HtoB(strData)
    MsgBox strData, , "16進法→2進法"
'**********************
'2進法→16進法→文字列
'**********************
    strData = BtoH(strData)
    MsgBox strData, , "2進法→16進法"
    strData = HexToStr(strData)
    MsgBox strData, , "16進法→文字列"
    Erase lngNu
End Sub
'-------------------------------------------------------------------------------------------------------

Private Function StrToHex(ByVal strData As String) As String '文字列→16進法
    Dim strChar As String
    ReDim strHex(1 To Len(strData)) As String
    ReDim lngNu(1 To Len(strData))
    For i = 1 To Len(strData)
        strChar = Mid$(strData, i, 1)
        strHex(i) = Hex$(Asc(strChar))
        lngNu(i) = Len(strHex(i)) '16進法の値の桁数を格納
    Next
    StrToHex = Join$(strHex, vbNullString)
End Function
'-------------------------------------------------------------------------------------------------------

Private Function HtoB(ByVal strH As String) As String '16進法→2進法
    ReDim strHtoB(1 To Len(strH)) As String
    For i = 1 To Len(strH)
        strHtoB(i) = varBinary(Val("&h" & Mid$(strH, i, 1)))
    Next
    HtoB = Join$(strHtoB, vbNullString)
End Function
'-------------------------------------------------------------------------------------------------------

Private Function BtoH(ByVal strB As String) As String '2進法→16進法
    ReDim strBtoH(1 To Len(strB) / 4) As String
    For i = 1 To Len(strB) / 4 '2進法(4bit分)を16進法に変換
        strBtoH(i) = colHValue.Item(Mid$(strB, (i - 1) * 4 + 1, 4))
    Next
    BtoH = Join$(strBtoH, vbNullString)
End Function
'-------------------------------------------------------------------------------------------------------

Private Function HexToStr(ByVal strData As String) As String '16進法→文字列
    Dim lngLen As Long
    Dim strHex As String
    ReDim strChar(1 To UBound(lngNu)) As String
    lngLen = 1
    For i = 1 To UBound(lngNu)
        strHex = Mid$(strData, lngLen, lngNu(i))
        strChar(i) = Chr$(Val("&h" & strHex))
        lngLen = lngLen + lngNu(i)
    Next
    HexToStr = Join$(strChar, vbNullString)
End Function

メモ

◆「$」の付く関数
 参照

◆Mid関数
 参照

◆Hex関数
 指定した値を 16 進数で表した文字列型 (String) を返す。

 構文:Hex(number)
 [number]
  必ず指定。任意の数式または文字列式を指定。
  整数でない場合、変換の前に一番近い整数に丸められる。

 メモ:適切な範囲の数値の前に&Hを付けて記述すると、値を直接16進数で記述できる。
    例:10 進数の 16 → &H10

◆Asc関数
 指定文字列の先頭の文字を文字コードで返す変換関数。整数型 (Integer) の値を返す。

 構文:Asc(string)
 [string]
  任意の文字列式を必ず指定。

 メモ:
    ・対になる関数はChr関数
    ・文字列に含まれたバイトデータを取得するには、AscB 関数を使用
    ・AscW関数は、Unicode 文字セットの文字を返す
     Unicode をサポートしていない場合は、Asc関数と同じ文字コードを返す。

◆Val関数
 指定した文字列に含まれる数値を適切なデータ型に変換して返す。

 構文:Val(string)
 [string]
  任意の文字列式を必ず指定。

 メモ:
    ・文字列中に数字以外の文字が見つかると、Val 関数は読み込みを中止
    ・円記号 (\) やカンマ (,) なども、Val 関数は数値として解釈しない
    ・基数を示すプリフィックス &O (8 進数) や &H (16 進数) は認識
    ・引数の文字列中に含まれるスペース、タブ、ライン フィードは無視される
    例:Val(" 1615 198th Street N.E.") → 1615198

◆Chr関数
 指定した文字コードに対応する文字を示す文字列型 (String) の値を返す。

 構文:Chr(charcode)
 [charcode]
  文字を特定するための長整数型 (Long) の値を必ず指定。

 メモ:
    ・対になる関数はAsc関数
    ・文字列型 (String) のデータをバイトデータとして扱う場合は、ChrB 関数を使用
    ・ChrW 関数は、Unicode 文字セットの文字を含む文字列型 (String) で文字を返す
     Unicode をサポートしていない場合は、Chr関数と同じ文字コードを返す

◆Join関数
 配列の各要素を結合して作成される文字列を返す。
 構文:Join(sourcearray [, delimiter])

 [sourcearray]
  必ず指定。結合する文字列を含む 1 次元配列を指定。
 [delimiter]
  省略可能。戻り値となる文字列を区切るのに使用する文字を指定。
  省略すると半角スペース (" ") が使用。

◆Collectionオブジェクト
 Collection オブジェクトとは、1 つのオブジェクトとして参照できる複数の要素の集合。Collection オブジェクトを利用すると、互いに関連付けられた複数の要素を 1 つのオブジェクトとして参照できる。連想配列と呼ぶこともある。作成方法は次のとおり。

 Dim X As New Collection

 Collectionオブジェクトのメソッドは以下のとおり。

 [Add]
  オブジェクトにメンバを追加。主な引数は、取得対象の[Item]と、取得時の[key]
 [Remove]
  メンバの削除。引数は[Index]。[Index]は追加した順に「1」からつけられる。
  削除した場合には、自動的に付け直される。
 [Item]
  メンバの取得
 [Count]
  メンバ数の取得


Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.