【问题标题】:octal to binary for 12 digit numbers in excelexcel中12位数字的八进制到二进制
【发布时间】:2017-01-08 11:10:59
【问题描述】:

我正在尝试将 12 位八进制数转换为二进制数

但看起来 excel 的内置函数 OCT2Bin 不适用于大于 517 的数字

所以我尝试拆分数字并将它们连接起来,但没有成功

我试过了

=OCT2BIN(MID(A2,1,2))&OCT2BIN(MID(A2,3,2))&OCT2BIN(MID(A2,5,2))&OCT2BIN(MID(A2,7,2))&OCT2BIN(MID(A2,9,2))&OCT2BIN(MID(A2,11,2))

例如数字的八进制转二进制

123456765432 

1010011100101110111110101100011010

但我的公式正在返回

101011100101110111110101100110100

我知道公式不起作用,因为我不应该破坏数字并将它们连接起来。但我不确定如何在excel中处理它

有没有办法将 12 位八进制数转换为二进制?

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    由于excel-vba 也被标记,因此使用 VBA 可以更一般地解决这个问题。

    Public Function myDec2Bin(ByVal decValue As Double) As String
     Select Case decValue
      Case 0
       myDec2Bin = "0"
      Case 1
       myDec2Bin = "1"
      Case Else
       myDec2Bin = myDec2Bin(Int(decValue / 2)) & IIf(decValue / 2 = Int(decValue / 2), "0", "1")
     End Select
    End Function
    
    Public Function myOct2Dec(octValue As String) As Double
     Dim decValue As Double
     For i = 0 To Len(octValue) - 1
      decValue = decValue + Mid(octValue, i + 1, 1) * (8 ^ (Len(octValue) - 1 - i))
     Next
     myOct2Dec = decValue
    End Function
    
    Public Function myOct2Bin(octValue As String) As String
     Dim decValue As Double
     decValue = myOct2Dec(octValue)
     myOct2Bin = myDec2Bin(decValue)
    End Function
    

    那些UDF 都可以用作单元格公式,例如:

    =myOct2Bin(A2)
    

    【讨论】:

      【解决方案2】:

      连接函数没有问题,因为八进制数中的每个数字恰好代表二进制中的 3 位数字。 您的问题是省略了前导零,例如在您的示例中 34o = 011100 但不返回第一个 0,因此您只连接 11100。 OCT2BIN 函数有另一个参数,您可以在其中确定返回的位数:

      OCT2BIN(34) = 11100
      OCT2BIN(34, 6) = 011100
      

      就性能而言:您可以一次转换 3 个八进制数字,而不仅仅是 2 个。

      【讨论】:

      • 谢谢 Jan,3 位数可能会得到大于 517 的值
      • @vignesh 八进制 3 位的最大值是 777,等于十进制的 511
      • 谢谢 Jan 我还想将二进制的前 27 位转换为十进制,我试过了,它似乎不起作用 =BIN2DEC(MID(B2,1,9))&BIN2DEC(MID(B2 ,10,9))&BIN2DEC(MID(B2,20,9)) 知道为什么它不起作用吗?
      • @vignesh 从二进制转换为十进制,您不能连接结果,因为一个系统中的数字数量与另一个系统不成比例(与二进制和八进制不同,其中一个八进制数字始终等于 3 个二进制数字)。我不确定vba中是否有有效的方法。解决方法:将二进制转换为八进制(或使用现有的八进制值)并使用 oct2dec 将其转换为十进制。 oct2dec 接受最多 30 位的八进制值,足以满足您的需要。
      【解决方案3】:

      试试这个,我检查了结果

      【讨论】:

      • 谢谢,点赞。我还想将二进制的前 27 位转换为十进制,我试过了,它似乎不起作用 =BIN2DEC(MID(B2,1,9))&BIN2DEC(MID(B2,10,9))&BIN2DEC(MID( B2,2‌​0,9)) 知道为什么它不起作用吗?
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2017-09-27
      • 2014-03-11
      • 2021-06-08
      • 2013-11-26
      相关资源
      最近更新 更多