[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.