トップ > 備忘録 > 文字列←→16進数←→2進数の相互変換

文字列←→16進数←→2進数の相互変換2013.09.23 更新日:2024.04.20

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

ポイント

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


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

サンプルコード2013.09.23 更新日:2024.04.20

変換対象の文字列を次の順に変換。文字列→16進数→2進数→16進数→文字列

'----------------------------------------------------------
' 文字列 ←→ 16進数 ←→ 2進数の相互変換マクロ
'----------------------------------------------------------
Sub Interconversion_Main()
    ' 変換対象文字列
    Dim str As String
    str = "坂江 保"
    MsgBox str, , "変換対象文字列"

    ' 文字列 → 16進数
    Dim strHexString As String
    strHexString = convertStringToHex(str)
    MsgBox strHexString, , "文字列 → 16進数"
    
    ' 16進数 → 2 進数
    Dim strBinaryString As String
    strBinaryString = convertHextoBinary(strHexString)
    MsgBox strBinaryString, , "16進数 → 2 進数"
    
    ' 2 進数 → 16進数
    strHexString = convertBinaryToHex(strBinaryString)
    MsgBox strHexString, , "2 進数 → 16進数"
    
    ' 16進数 → 文字列
    str = convertHextoString(strHexString)
    MsgBox str, , "16進数 → 文字列"
End Sub

'---------------------------------------------------------- ' 文字列を16進数に変換する関数 '---------------------------------------------------------- '[引数] ' strTargetText:対象文字列 '[戻り値] ' 16進数に変換した各文字を半角スペースで連結した文字列 ' 引数が空の文字列の場合は空の文字列 '[作成日]2013.09.23 [更新日]2024.04.20 '---------------------------------------------------------- Function convertStringToHex(ByVal strTargetText As String) As String If Len(strTargetText) = 0 Then Exit Function Dim i As Long ReDim strHex(1 To Len(strTargetText)) As String For i = 1 To Len(strTargetText) strHex(i) = Hex$(Asc(Mid$(strTargetText, i, 1))) Next convertStringToHex = Join$(strHex, " ") End Function
'---------------------------------------------------------- ' 16進数を2進数に変換する関数 '---------------------------------------------------------- '[引数] ' strHex:16進数の文字列 '[戻り値] ' 2進数に変換した値を文字数毎に半角スペースで連結した文字列 ' 引数が空の文字列の場合は空の文字列 '[作成日]2013.09.23 [更新日]2024.04.20 '---------------------------------------------------------- Function convertHextoBinary(ByVal strHex As String) As String If Len(strHex) = 0 Then Exit Function '--------------------------------------- ' 0~15の2進数を配列として設定 '--------------------------------------- Dim varBinaryNumber As Variant varBinaryNumber = Array("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", _ "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111") '--------------------------------------- ' 16進数を2進数に変換 '--------------------------------------- Dim i As Long ReDim strBinary(1 To Len(strHex)) As String For i = 1 To Len(strHex) If StrComp(Mid$(strHex, i, 1), " ") = 0 Then strBinary(i) = " " Else strBinary(i) = varBinaryNumber(Val("&h" & Mid$(strHex, i, 1))) End If Next convertHextoBinary = Join$(strBinary, vbNullString) End Function
'---------------------------------------------------------- ' 2進数を16進数に変換する関数 '---------------------------------------------------------- '[引数] ' strBinary:2進数の文字列 '[戻り値] ' 16進数に変換した値を文字数毎に半角スペースで連結した文字列 ' 引数が空の文字列の場合は空の文字列 '[作成日]2013.09.23 [更新日]2024.04.20 '---------------------------------------------------------- Function convertBinaryToHex(ByVal strBinary As String) As String If Len(strBinary) = 0 Then Exit Function '--------------------------------------- ' 0~15の2進数を配列として設定 '--------------------------------------- Dim varBinaryNumber As Variant varBinaryNumber = Array("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", _ "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111") '--------------------------------------- ' コレクションオブジェクトに2進数を設定 '--------------------------------------- Dim i As Long ' 2進数を「キー」とし、対応する16進数「0~F」を「アイテム」として登録 Dim colHexAndBinary As New Collection For i = 0 To 15 colHexAndBinary.Add CStr(Hex$(i)), varBinaryNumber(i) Next '--------------------------------------- ' 2進数を16進数に変換 '--------------------------------------- ' 2進数の文字列をスペースで分割し配列として設定 Dim varArray As Variant If InStr(1, strBinary, " ") Then varArray = Split(strBinary, " ") Else ReDim varArray(0) varArray(0) = strBinary End If ' 2進数を4bitずつ16進数に変換 Dim j As Long For i = 0 To UBound(varArray) ReDim strHext(1 To (Len(varArray(i)) / 4)) As String For j = 1 To (Len(varArray(i)) / 4) strHext(j) = colHexAndBinary.Item(Mid$(varArray(i), (j - 1) * 4 + 1, 4)) Next varArray(i) = Join$(strHext, vbNullString) Next convertBinaryToHex = Join$(varArray, " ") End Function
'---------------------------------------------------------- ' 16進数を文字列に変換する関数 '---------------------------------------------------------- '[引数] ' strHex:16進数の文字列 '[戻り値] ' 16進数から変換した文字を連結した文字列 ' 引数が空の文字列の場合は空の文字列 '[作成日]2013.09.23 [更新日]2024.04.20 '---------------------------------------------------------- Function convertHextoString(ByVal strHex As String) As String If Len(strHex) = 0 Then Exit Function '--------------------------------------- ' 16進数を文字列に変換 '--------------------------------------- ' 16進数の文字列をスペースで分割し配列として設定 Dim varArray As Variant If InStr(1, strHex, " ", vbTextCompare) Then varArray = Split(strHex, " ") Else ReDim varArray(0) varArray(0) = strHex End If Dim i As Long ReDim strChar(UBound(varArray)) As String For i = 0 To UBound(varArray) strChar(i) = Chr$(Val("&h" & varArray(i))) Next convertHextoString = 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]
メンバ数の取得


ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.