[[20211101202121]] 『2進数から16進数に変換』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2進数から16進数に変換』(hiro)

2進数から16進数=BASE(K3,16,10)を使用して変換しようとすると、
NUM!と表示されてしまい困っております。

どなたかご教示お願いします。

2進数
010000000000000001010000000110010001

10進数
17180197265

16進数
400050191

< 使用 Excel:Office365、使用 OS:Windows10 >


 多分なんかの確認用に作った変換関数(だったと思う^^;)なので、かなりテキトーですが・・・

    Function Dec2N(DecNum As Variant, ToDigit As Long) As Variant() '10進数→n進数配列
        If ToDigit < 2 Then Exit Function
        Dim digit As Long, Ary() As Variant, Ans() As Variant
        Dim r As Variant
        r = CDec(DecNum)
        Do
            ReDim Preserve Ary(0 To digit)
            Ary(digit) = szMod(r, ToDigit)
            r = Fix(r / ToDigit)
            If r = 0 Then Exit Do
            digit = digit + 1
        Loop
        ReDim Ans(UBound(Ary))
        For r = digit To 0 Step -1
            Ans(digit - r) = Ary(r)
        Next
        Dec2N = Ans
    End Function
    Function n2Dec(nNum As Variant, digit As Long) As Variant 'n進数(配列)→10進数
        If digit < 2 Then Exit Function
        Dim Ary As Variant, pos As Long, i As Long
        If IsArray(nNum) Then Ary = nNum Else Ary = Array(nNum)
        pos = UBound(Ary) - LBound(Ary)
        For i = LBound(Ary) To UBound(Ary)
            n2Dec = n2Dec + CDec(Ary(i) * digit ^ pos)
            pos = pos - 1
        Next
    End Function
    Function szMod(ByVal Number As Variant, ByVal Divisor As Variant) As Variant '単なるMOD関数
        szMod = Number - Divisor * Int(CDec(Number / Divisor))
    End Function

    Sub テスト()
        Const BIN_STR = "010000000000000001010000000110010001"
        Dim v As Variant, i As Long
        ReDim v(1 To Len(BIN_STR))
        For i = 1 To Len(BIN_STR)
            v(i) = Mid$(BIN_STR, i, 1)
        Next
        v = n2Dec(v, 2)
        v = Dec2N(v, 16)
        For i = LBound(v) To UBound(v)
            v(i) = Hex(v(i))
        Next
        Debug.Print Join(v, "")
    End Sub

(白茶) 2021/11/01(月) 21:58


 2進数の桁数が36桁固定なら、下記の式で。

  =TEXT(BIN2HEX(MID(A1,1,4)),"00")&TEXT(BIN2HEX(MID(A1,5,8)),"00")&TEXT(BIN2HEX(MID(A1,13,8)),"00")
&TEXT(BIN2HEX(MID(A1,21,8)),"00")&TEXT(BIN2HEX(MID(A1,29,8)),"00")
(hatena) 2021/11/01(月) 23:02

 >Office365

 バージョンがそれなら、これでいいかもです。

 B2セル =LET(Le,LEN(A2),Sq,SEQUENCE(Le),SUM(MID(A2,Sq,1)*2^(Le-Sq)))
 C2セル =CONCAT(BIN2HEX(MID(A2,SEQUENCE(LEN(A2)/4,1,1,4),4),1))

 <結果図>
 行  __________________A__________________  _____B_____  ____C____
  1           2進                       10進        16進     
  2   010000000000000001010000000110010001  17180197265  400050191

(半平太) 2021/11/01(月) 23:28


 ↑
 2進数の桁が4の倍数じゃない場合だとマズかった。 2進数はK3セルにあるんですかね。

 L3セル =LET(Le,LEN(K3),Sq,SEQUENCE(Le),SUM(MID(K3,Sq,1)*2^(Le-Sq)))
 M3セル =LET(Le,CEILING(LEN(K3),4),St,RIGHT("000"&K3,Le),CONCAT(BIN2HEX(MID(St,SEQUENCE(Le/4,1,1,4),4),1)))

 <Sheet1 シート 結果図>
 行  __________________K__________________  ____ L ____  ____M____
  2           2進                       10進        16進     
  3   010000000000000001010000000110010001  17180197265  400050191

(半平太) 2021/11/01(月) 23:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.