二进制到十进制转换为27位数

时间:2017-01-08 13:53:14

标签: excel vba macros excel-formula

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

BIN2DEC(B2) 

没用?

我也试过

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

我正在尝试的号码是

001010011100101110111110101

我得到的答案是

83302491

正确答案在哪里

21913077

3 个答案:

答案 0 :(得分:2)

octal to binary for 12 digit numbers in excel我已经提供了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,...因此,对于一个八进制数字,正好需要3个二进制数字。但是将十进制从/转换为二进制是不可能的。 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个部分)。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

=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)

需要输入单格数组公式(即[F2]然后输入/粘贴公式,然后按[ctrl-shift-enter])

相关问题