在Excel中将12位八进制转换为二进制

3

我正在尝试将一个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 

is

1010011100101110111110101100011010

但是我的公式返回的结果是
101011100101110111110101100110100

我理解这个公式不起作用是因为我不应该将数字拆分并连接起来。但我不确定如何在Excel中处理它。

是否有一种方法可以将12位八进制数转换为二进制?

3个回答

4

由于标记了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)

3

将函数串联起来并不是问题,因为八进制数中的每个数字在二进制中都表示3个数字。 你的问题是前导零被省略了,例如,在你的例子中34o = 011100,但第一个0没有返回,所以你只串联了11100。OCT2BIN函数有另一个参数,可以确定返回的数字数量:

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

关于性能方面:您可以一次转换3个八进制数字,而不是仅限于2个。


谢谢Jan,3位数字可能会得到大于517的值。 - Vignesh Subramanian
1
@vignesh 三位八进制数的最大值为777,相当于十进制的511。 - jBuchholz
谢谢Jan, 我想把二进制的前27位转换成十进制,我尝试了这个公式,但好像不起作用: =BIN2DEC(MID(B2,1,9))&BIN2DEC(MID(B2,10,9))&BIN2DEC(MID(B2,20,9)) 你有什么想法为什么它不起作用吗? - Vignesh Subramanian
@vignesh 将二进制转换为十进制时,不能连接结果,因为一个系统中的数字数量与另一个系统不成比例(与二进制和八进制不同,其中一个八进制数字始终等于3个二进制数字)。 我不确定在vba中是否有有效的方法。 解决方法:将二进制转换为八进制(或使用现有的八进制值),然后使用oct2dec将其转换为十进制。 oct2dec接受高达30位的八进制值,这对您的需求足够了。 - jBuchholz

2

尝试这个,我已经检查了结果在此输入图片描述


谢谢,已点赞。我还想将二进制的前27位转换为十进制,我尝试了这个公式,但好像不起作用 =BIN2DEC(MID(B2,1,9))&BIN2DEC(MID(B2,10,9))&BIN2DEC(MID(B2,20,9)) 你有什么想法为什么它不起作用吗? - Vignesh Subramanian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接