二进制到27位十进制转换

我正在尝试将二进制数字转换为27个字符

BIN2DEC(B2) 

没有工作

我也试过了

 =BIN2DEC(MID(B3,1,9))&BIN2DEC(MID(B3,10,9))&BIN2DEC(MID(B3,20,9)) 

我正在尝试的数字是

 001010011100101110111110101 

我得到的答案是

 83302491 

正确的答案在哪里?

 21913077 

在八进制到二进制的Excel数字12位数字我已经提供了一个UDF Public Function myOct2Dec(octValue As String) As Double已经。 你有没有尝试去理解它是如何工作的? 如果你明白这一点,那么你可以适应这个Bin到Dec转换:

 Public Function myBin2Dec(binValue As String) As Double Dim decValue As Double For i = 0 To Len(binValue) - 1 decValue = decValue + Mid(binValue, i + 1, 1) * (2 ^ (Len(binValue) - 1 - i)) Next myBin2Dec = decValue End Function 

像使用它

 =myBin2Dec(B2) 

使用公式不能简单地将分割的结果拼接在一起。 在将八进制数从八进制数转换成二进制数的情况下,这是可能的,因为8 ^ 0 = 2 ^ 0,8 ^ 1 = 2 ^ 3,8 ^ 2 = 2 ^ 6,…因此,对于一个八进制数只需要三个二进制数字。 但是将小数从/转换成二进制是不可能的。 10 ^ 0 = 2 ^ 0,10 ^ 1 = 2 ^

所以你的公式必须考虑到最左边的9个二进制数字必须乘以2 ^ 0,接下来的9个数字从右到左必须乘以2 ^ 9,接下来的9个数字从右边到左边必须乘以2 ^ 18。

 =BIN2DEC(MID(B2,1,9))*2^18+BIN2DEC(MID(B2,10,9))*2^9+BIN2DEC(MID(B2,19,9)) 

但是,这是非常静态的,因为它只能用于精确长度为27的二进制值(9位数的3部分)。

这是一个引导现有工作表函数的VBA版本。 它将二进制转换为hex,然后让工作表函数从hex转换为十进制:

 Function Binary2Dec(ByVal s As String) As Variant Dim i As Long, n As Long, r As Long Dim h As String n = Len(s) r = n Mod 4 If r > 0 Then s = String(4 - r, "0") & s 'now the length of s is a multiple of 4 n = Len(s) With Application.WorksheetFunction For i = 1 To n - 3 Step 4 h = h & .Bin2Hex(Mid(s, i, 4)) Next i Binary2Dec = CDec(.Hex2Dec(h)) End With End Function 

这不需要VBA,可以用于各种长度的input:

 =SUM(VALUE(MID(B3,ROW(OFFSET($A$1,0,0,LEN(B3))),1))/(2^ROW(OFFSET($A$1,0,0,LEN(B3)))))*2^LEN(B3) 

它需要作为一个单元格arrays公式input(即[F2],然后键入/粘贴公式,然后[Ctrl + Shift + Enter])